web-dev-qa-db-ja.com

NSData dataWithContentsOfFileがnullを返す

このコードを使用して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が返されます。どこで間違えているのかわかりません。

13
user3129278

パスを追加する代わりに、pathForResource:ofType:を使用するので、

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

NSData *fileData = [NSData dataWithContentsOfFile:str];
25
NSString *filePath = [[NSBundle mainBundle] pathForResource:@"MyFile" ofType:@"txt"];  
NSData *myData = [NSData dataWithContentsOfFile:filePath];  
4
TtheTank

なんらかの理由でファイルの読み取りに失敗しました。 -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
}
4
JeremyP

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!)
2
Kevin ABRIOUX

ResourcetypeでpathforResourceを使用し、ファイルにデータがあるかどうかを確認する必要があります。

それはnilであってはなりません。

0
Manthan