回答

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”。