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