回答

12

要將通用數組轉換爲NSData,您需要存檔器!如果你知道如何餵養NSData,你知道如何使用NSKeyedArchiver。所以:

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

當然你array需要的所有元素來實現encodeWithCoder:

+4

爲了完整起見,您使用NSKeyedUnarchiver進行相反操作。 – 2011-01-12 09:07:45

+0

「數組中的所有元素都需要實現encodeWithCoder:」< - 這僅僅是自定義對象需要的嗎? – 2013-11-07 01:28:35

+0

數組中的所有元素都需要由Apple或您執行'encodeWithCoder:'的實現。您可以通過查看官方文檔來檢查Apple提供的對象是否實現它...查看它是否實現了協議「NSCoder」。 – Yuji 2013-11-08 04:57:37

13

Yuji的回答是對的。但更準確的說,您的數組元素必須實現協議和FILLIN自己的代碼來的initWithCoder方法:和encodeWithCoder: 像:

- (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"]; 
} 

,那麼你可以使用歸檔和unchariver,如:

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

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

欲瞭解更多,可以參考「Archiving Objective-C Objects with NSCoding」。