Lire / écrire un file dans le dossier Documents

J'essaie d'écrire une string de text très basique dans mon directory de documents et de travailler à partir de là pour save plus tard d'autres files, etc.

Je suis actuellement coincé avec ça n'écrivant rien dans mon dossier Documents

(Dans mon viewDidLoad )

 NSArray *pathArray = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) NSSsortingng *documentsDirectory = [pathArray objectAtIndex:0]; NSSsortingng *textPath = [documentsDirectory ssortingngByAppendingPathComponent:@"file1.txt"]; NSSsortingng *text = @"My cool text message"; [[NSFileManager defaultManager] createFileAtPath:textPath contents:nil atsortingbutes:nil]; [text writeToFile:textPath atomically:NO encoding:NSUTF8SsortingngEncoding error:NULL]; NSLog(@"Text file data: %@",[[NSFileManager defaultManager] contentsAtPath:textPath]); 

C'est ce qui est imprimé:

2011-06-27 19: 04: 43.485 MyApp [5731: 707] Données du file text: (null)

Si j'essaie cela, il imprime aussi null:

 NSLog(@"My Documents: %@", [[NSFileManager defaultManager] contentsOfDirectoryAtPath:documentsDirectory error:NULL]); 

Qu'est-ce que j'ai manqué ou est-ce que je me trompe en écrivant dans ce file? Est-ce que c'est quelque chose que je dois changer dans mon plist ou certains frameworks / imports nécessaires?

Merci

[EDIT] J'ai passé un object NSError à travers le writeToFile et j'ai eu cette erreur:

Erreur: Erreur Domaine = NSCocoaErrorDomain Code = 512 "L'opération n'a pas pu aboutir. (Erreur Cocoa 512.)" UserInfo = 0x12aa00 {NSFilePath = / var / mobile / Applications / 887F4691-3B75-448F-9384-31EBF4E3B63E / Documents / file1.txt, NSUnderlyingError = 0x14f6b0 "L'opération n'a pas pu aboutir, pas un directory"}

[EDIT 2] Cela fonctionne bien sur le simulateur mais pas sur mon téléphone: /

Au lieu d'utiliser NSFileManager pour get le contenu de ce file, essayez d'utiliser NSSsortingng en tant que tel:

 NSArray *pathArray = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) NSSsortingng *documentsDirectory = [pathArray objectAtIndex:0]; NSSsortingng *textPath = [documentsDirectory ssortingngByAppendingPathComponent:@"file1.txt"]; NSError *error = nil; NSSsortingng *str = [NSSsortingng ssortingngWithContentsOfFile:textPath encoding:NSUTF8SsortingngEncoding error:&error]; if (error != nil) { NSLog(@"There was an error: %@", [error description]); } else { NSLog(@"Text file data: %@", str); } 

Modifier: Ajouté le code de vérification d'erreur.

Comment obtenez-vous documentsDirectory ?

Vous devriez utiliser quelque chose comme ceci:

 NSArray *pathArray = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) NSSsortingng *documentsDirectory = [pathArray lastObject]; 

Placez une instruction NSLog après chaque ligne où vous définissez la valeur d'une variable, afin que vous puissiez inspecter ces valeurs. Cela devrait vous aider à déterminer rapidement où les choses commencent à mal tourner.

Le problème a été résolu en définissant un ID de bundle non standard dans die info.plist

J'ai utilisé l'ID de lot d'iTunes Connect pour cette application spécifique. Maintenant tout fonctionne parfaitement.

Vous pouvez également utiliser NSFileHandle pour écrire des données dans un file et les save dans le directory de document:

Créer une variable de NSFileHandle

 NSFileHandle *outputFileHandle; 

utiliser la fonction prepareDataWrittenHandle avec le nom de file en paramètre avec l'extension de file

 -(void)prepareDataWrittenHandle:(NSSsortingng *)filename { //Create Path of file in document directory. NSSsortingng *documentsDirectory = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]; NSSsortingng *outputFilePath = [documentsDirectory ssortingngByAppendingPathComponent:filename]; //Check file with above name is already exits or not. if ([[NSFileManager defaultManager] fileExistsAtPath:outputFilePath] == NO) { NSLog(@"Create the new file at outputFilePath: %@", outputFilePath); //Create file at path. BOOL suc = [[NSFileManager defaultManager] createFileAtPath:outputFilePath contents:nil atsortingbutes:nil]; NSLog(@"Create file successful?: %u", suc); } outputFileHandle = [NSFileHandle fileHandleForWritingAtPath:outputFilePath]; } 

puis écrivez la valeur de la string dans le file:

 //Create a file [self prepareDataWrittenHandle:@"file1.txt"]; //Ssortingng to save in file NSSsortingng *text = @"My cool text message"; //Convert NSSsortingng to NSData to save data in file. NSData* data = [text dataUsingEncoding:NSUTF8SsortingngEncoding] //Write NSData to file [_outputFileHandle writeData:data]; //close the file if written complete [_outputFileHandle closeFile]; 

à la fin du file écrit, vous devez fermer le file.

Vous pouvez également vérifier le contenu écrit dans le file comme NSSsortingng pour le sharepoint vue de debugging comme mentionné ci-dessus par @Glenn Smith:

 NSSsortingng *documentsDirectory = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]; NSSsortingng *outputFilePath = [documentsDirectory ssortingngByAppendingPathComponent:@"file1.txt"]; NSError *error; NSSsortingng *str = [NSSsortingng ssortingngWithContentsOfFile:outputFilePath encoding:NSUTF8SsortingngEncoding error:&error]; if (error != nil) { NSLog(@"There was an error: %@", [error description]); } else { NSLog(@"Text file data: %@", str); }