NSData *data;
data = [self fillInSomeStrangeBytes];
Meine Frage ist nun, wie ich dieses data
am einfachsten in eine Datei schreiben kann.
(Ich habe bereits eine NSURL file://localhost/Users/Coding/Library/Application%20Support/App/file.strangebytes
)
NSData
hat eine Methode namens writeToURL:atomically:
das macht genau das was du willst. Schauen Sie in die Dokumentation für NSData
nach, um zu sehen, wie man es benutzt.
Beachten Sie, dass das Schreiben von NSData
in eine Datei eine IO) - Operation ist, die den Hauptthread blockieren kann, insbesondere wenn das Datenobjekt groß ist.
Aus diesem Grund wird empfohlen, dies auf einem Hintergrund-Thread durchzuführen. Der einfachste Weg wäre, GCD wie folgt zu verwenden:
// 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);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *dataPath = [documentsDirectory stringByAppendingPathComponent:@"yourfilename.dat"];
// Save it into file system
[data writeToFile:dataPath atomically:YES];
});
writeToURL: atomically: oder writeToFile: atomically: wenn Sie einen Dateinamen anstelle einer URL haben.
Sie haben auch writeToFile:options:error:
oder writeToURL:options:error:
kann Fehlercodes melden, falls das Speichern von NSData
aus irgendeinem Grund fehlgeschlagen ist. Beispielsweise:
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;
}