此代码可以与自定义对象数组一起使用吗?

时间:2010-09-19 04:52:06

标签: objective-c arrays cocoa-touch nskeyedarchiver nscoding

[[NSUserDefaults standardUserDefaults] setObject:myArray forKey:@"myArray"];

如果我使一组自定义对象符合NSCoding协议,那么上面的工作是否正常?我是否必须同时使自定义类和包含自定义对象数组的视图控制器符合NSCoding协议或自定义类?我是否必须在某处使用NSKeyedArchiver?

1 个答案:

答案 0 :(得分:2)

您似乎需要使用NSKeyedArchiverNSArchiver归档您的数组。如果您首先将数组存档到NSData对象中:

NSData *data = [NSKeyedArchiver archivedDataWithRootObject:myArray];

然后,您可以将这些数据存储在NSUserDefaults中,如下所示:

[[NSUserDefaults standardUserDefaults] setObject:data forKey:@"myArray"];

要加载数组,请使用:

NSData *data = [[NSUserDefaults standardUserDefaults] objectForKey:@"myArray"];
NSArray *myArray = [NSKeyedUnarchiver unarchiveObjectWithData:data];

如果您想使用NSMutableArray,那么只需用NSArray替换上面代码中的任何NSMutableArray次出现。 您只需NSMutableArray *myMutableArray = [myArray mutableCopy]即可使用NSMutableArray。

但是,嘿,如果你遇到使NSCoding兼容的麻烦,为什么不把它归档到一个文件?

使我认为您需要使用归档程序的文档是here,以便您可以自行检查。