NSData dataWithContentsOfFile返回null

时间:2013-12-27 06:11:48

标签: ios iphone objective-c nsdata

我正在尝试使用此代码提取JSON资源中存在的xcode文件

-(void)readJsonFiles
{
    NSString *str=[[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"classes.json"];
    NSLog(@"Path: %@", str);
    NSData *fileData = [NSData dataWithContentsOfFile:str];
    NSLog(@"Data: %@", fileData);
    SBJsonParser *parser = [[SBJsonParser alloc] init] ;
    NSDictionary *jsonObject = [parser objectWithData:fileData];
    NSLog(@"%@", jsonObject);
}

路径返回文件路径的这个链接

/Users/astutesol/Library/Application Support/iPhone Simulator/6.0/Applications/A4E1145C-500C-4570-AF31-9E614FDEADE4/The Gym Factory.app/classes.json

但是当我记录fileData时,它会返回null。我不知道我在哪里做错了。

6 个答案:

答案 0 :(得分:25)

使用pathForResource:ofType:,而不是追加路径,所以

NSString *str=[[NSBundle mainBundle] pathForResource:@"classes" ofType:@"json"];

NSData *fileData = [NSData dataWithContentsOfFile:str];

答案 1 :(得分:4)

由于某种原因,它无法读取您的文件。使用-dataWithContentsOfFile:options:error:找出原因。

NSError* error = nil;
NSData *fileData = [NSData dataWithContentsOfFile:str options: 0 error: &error];
if (fileData == nil)
{
   NSLog(@"Failed to read file, error %@", error);
}
else
{
    // parse the JSON etc
}

答案 2 :(得分:4)

NSString *filePath = [[NSBundle mainBundle] pathForResource:@"MyFile" ofType:@"txt"];  
NSData *myData = [NSData dataWithContentsOfFile:filePath];  

答案 3 :(得分:2)

有Swift 3的解决方案:

//create a fil's path, decompose name and extension
let path = Bundle.main.path(forResource: "anim-gif-1", ofType: "gif")
//get the data asociated to this file
let file = NSData(contentsOfFile: path!)

答案 4 :(得分:0)

您需要将pathforResource与resourcetype一起使用,并检查文件中是否有数据。

那不应该是零。

答案 5 :(得分:-1)

您可以按照此操作从文档目录中获取NSData

NSString *stringPath = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)objectAtIndex:0]stringByAppendingPathComponent:@"YOUR_FOLDER_NAME"];

stringPath  = [stringPath stringByAppendingPathComponent:@"JSON_FILE_NAME.json"];
NSLog(@"stringpath %@",stringPath);
NSData *fileData = [NSData dataWithContentsOfFile:stringPath];

希望这对你有用。