Antwort

12

Um ein generisches Array in ein NSData zu konvertieren, benötigen Sie einen Archiver! Wenn Sie wissen, wie man die NSData füttert, wissen Sie, wie man NSKeyedArchiver benutzt. Also:

NSArray* array= ... ; 
NSData* data=[NSKeyedArchiver archivedDataWithRootObject:array]; 

Natürlich sind alle Elemente in Ihrem array Bedürfnisse encodeWithCoder: zu implementieren.

+4

Der Vollständigkeit halber verwenden Sie einen NSKeyedUnarchiver, um das Gegenteil zu tun. –

+0

"Alle Elemente in Ihrem Array müssen encodeWithCoder implementieren:" <- Dies wird nur für benutzerdefinierte Objekte benötigt? –

+0

Alle Elemente in Ihrem Array müssen eine Implementierung von 'encodeWithCoder:' haben, entweder von Apple oder von Ihnen. Sie können überprüfen, ob ein von Apple bereitgestelltes Objekt es implementiert oder nicht, indem Sie sich die offizielle Dokumentation ansehen ... sehen, ob es das Protokoll 'NSCoder' implementiert. – Yuji

13

Yujis Antwort ist richtig. aber genauer gesagt, Ihr Element eines Arrays haben Protokoll zu implementieren und Ihren eigenen Code Methoden fillin initWithCoder: und encodeWithCoder: wie:

- (id)initWithCoder:(NSCoder *)decoder { 
    if (self = [super init]) { 
     self.title = [decoder decodeObjectForKey:@"title"]; 
     self.author = [decoder decodeObjectForKey:@"author"]; 
     self.published = [decoder decodeBoolForKey:@"published"]; 
    } 
    return self; 
} 
- (void)encodeWithCoder:(NSCoder *)encoder { 
    [encoder encodeObject:title forKey:@"time"]; 
    [encoder encodeObject:author forKey:@"author"]; 
    [encoder encodeBool:published forKey:@"published"]; 
} 

dann können Sie die Archivierungs verwenden und unchariver wie:

NSData *data = [NSKeyedArchiver archivedDataWithRootObject:notes]; 
[[NSUserDefaults standardUserDefaults] setObject:data forKey:@"notes"]; 

NSData *notesData = [[NSUserDefaults standardUserDefaults] objectForKey:@"notes"]; 
NSArray *notes = [NSKeyedUnarchiver unarchiveObjectWithData:notesData]; 

Für mehr, können Sie Referenz "Archiving Objective-C Objects with NSCoding" erhalten.

Verwandte Themen