Frage

NSData *data;
data = [self fillInSomeStrangeBytes];

Meine Frage ist nun, wie ich auf eine Datei dieses data auf einfachste Weise schreiben kann.

(Ich habe bereits ein NSURL file://localhost/Users/Coding/Library/Application%20Support/App/file.strangebytes)

War es hilfreich?

Lösung

NSData hat eine Methode namens writeToURL:atomically:, die nicht genau das, was Sie tun möchten. Schauen Sie in in der Dokumentation zu NSData zu sehen, wie es zu benutzen.

Andere Tipps

Beachten Sie, dass NSData in eine Datei schreiben, ist eine IO-Operation, die den Haupt-Thread blockieren kann. Vor allem, wenn das Datenobjekt groß ist.

Daher ist es ratsam, diese auf einem Hintergrund-Thread auszuführen, wäre der einfachste Weg, 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: atomar: oder writeToFile: atomar. , wenn Sie einen Dateinamen anstelle einer URL

Sie haben auch writeToFile:options:error: oder writeToURL:options:error: die Fehlercodes für den Fall, das Speichern des Berichts kann NSData fehlgeschlagen aus irgendeinem Grund. Zum Beispiel:

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;
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top