web-dev-qa-db-fra.com

NSData dataWithContentsOfFile renvoyant la valeur null

J'essaie d'extraire un fichier JSON qui existe dans mes ressources xcode à l'aide de ce code 

-(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);
}

chemin me retourner ce lien de chemin de fichier

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

mais quand je me connecte fileData il me retourne null. Je ne sais pas où je me trompe.

13
user3129278

Au lieu d’ajouter le chemin, utilisez pathForResource:ofType:, donc

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

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

Il est impossible de lire votre fichier pour une raison quelconque. Utilisez -dataWithContentsOfFile: options: error: pour savoir pourquoi.

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

Voici la solution pour 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

Vous devez utiliser pathforResource avec resourcetype et vérifier s’il existe des données dans votre fichier. 

Cela ne devrait pas être nul.

0
Manthan