Le moyen le plus simple d’écrire NSData dans un fichier

NSData *data; data = [self fillInSomeStrangeBytes]; 

Ma question est maintenant de savoir comment écrire ces data de la manière la plus simple dans un fichier.

(J’ai déjà un file://localhost/Users/Coding/Library/Application%20Support/App/file.strangebytes NSURL file://localhost/Users/Coding/Library/Application%20Support/App/file.strangebytes )

NSData a une méthode appelée writeToURL:atomically: cela fait exactement ce que vous voulez faire. Regardez dans la documentation de NSData pour voir comment l’utiliser.

writeToURL: atomically: ou writeToFile: atomiquement: si vous avez un nom de fichier au lieu d’une URL.

Notez que l’écriture de NSData dans un fichier est une opération d’E / S pouvant bloquer le thread principal. Surtout si l’object de données est volumineux.

Par conséquent, il est conseillé d’effectuer cette opération sur un thread d’arrière-plan, le plus simple étant d’utiliser GCD comme suit:

 // Use GCD's background queue dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{ // Generate the file path NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES); NSSsortingng *documentsDirectory = [paths objectAtIndex:0]; NSSsortingng *dataPath = [documentsDirectory ssortingngByAppendingPathComponent:@"yourfilename.dat"]; // Save it into file system [data writeToFile:dataPath atomically:YES]; }); 

Vous avez également writeToFile:options:error: ou writeToURL:options:error: qui peut signaler des codes d’erreur en cas d’échec de l’enregistrement de NSData pour une raison quelconque. Par exemple:

 NSError *error; NSURL *folder = [[NSFileManager defaultManager] URLForDirectory:NSApplicationSupportDirectory inDomain:NSUserDomainMask appropriateForURL:nil create:true error:&error]; if (!folder) { NSLog(@"%s: %@", __FUNCTION__, error); // handle error however you would like return; } NSURL *fileURL = [folder URLByAppendingPathComponent:filename]; BOOL success = [data writeToURL:fileURL options:NSDataWritingAtomic error:&error]; if (!success) { NSLog(@"%s: %@", __FUNCTION__, error); // handle error however you would like return; }