2011-05-27 3 views
0

J'utilise une méthode assez simple pour stocker des noms de fichiers dans un fichier texte. Pour une raison quelconque quand je lance le writeToFile je reçois un accident:Crash sur writeToFile

pathString = [NSString stringWithFormat:@"New FileName - %@.png", identifier]; 
NSString *currentContents = [NSString stringWithContentsOfFile:saveFilePath encoding:NSUTF8StringEncoding error:nil]; 
NSString *newContents = [NSString stringWithFormat:@"%@:::%@",currentContents, pathString]; 
NSData *newData = [newContents dataUsingEncoding:NSUTF8StringEncoding]; 
[newData writeToFile:saveFilePath options:NSDataWritingAtomic error:nil]; 

Il lit le fichier, les lieux de son contenu dans une variable appelée Current Contents, puis ajoute la nouvelle chaîne dans le fichier, et ré-écrit il. Qu'est-ce qui ne va pas ici?

Sans la ligne writeToFile cela fonctionne, avec cela, je reçois un plantage.

Origine SAVEFILEPATH

NSString *saveDocument = [NSString stringWithFormat:@"SavedFile.txt"]; 
NSString *docsDirectory = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]; 
saveFilePath = [docsDirectory stringByAppendingPathComponent:saveDocument]; 

Un NSLog de SAVEFILEPATH révèle un bon chemin

+1

Vous devez utiliser '- [NSData writeToURL: Options : error:] 'comme Apple recommande l'utilisation des objets' NSURL' sur les objets 'NSString' quand il s'agit de chemins de fichier. Soit dit en passant, vous avez une erreur de syntaxe sur la première ligne. –

+0

Ah vous parlez de la virgule, cela a été fait pendant mon processus d'anonymisation, mon code original a la virgule lol. À droite, je vais essayer ce NSURL au lieu de l'erreur NSString –

+1

: NIL devrait être erreur: NULL – onnoweb

Répondre

0

Il se trouve que la raison pour laquelle le dossier n'a pas été écrit était à cause d'une variable non affectée:

NSString *currentContents = [NSString stringWithContentsOfFile:saveFilePath encoding:NSUTF8StringEncoding error:nil]; 

aurait dû être:

NSString *currentContents = [[NSString alloc] initWithContentsOfFile:saveFilePath encoding:NSUTF8StringEncoding error:nil]; 
1

Je pense que votre problème est peut-être effectivement un caractère nul manquant ('\0') à la fin de votre objet NSData. Donc, vous finissez avec des données foirées. Vous pouvez utiliser -writeToFile:atomically:encoding:error: sur votre nouvelle chaîne tout de suite.