您能告诉我在Objective-C中存档NSArray自定义对象的语法或示例程序吗?
答案 0 :(得分:12)
查看 NSUserDefaults 。
对于存档阵列,您可以使用以下代码:
[[NSUserDefaults standardUserDefaults] setObject:[NSKeyedArchiver archivedDataWithRootObject:myArray] forKey:@"mySavedArray"];
然后,为了在数组中加载自定义对象,您可以使用以下代码:
NSUserDefaults *currentDefaults = [NSUserDefaults standardUserDefaults];
NSData *savedArray = [currentDefaults objectForKey:@"mySavedArray"];
if (savedArray != nil)
{
NSArray *oldArray = [NSKeyedUnarchiver unarchiveObjectWithData:savedArray];
if (oldArray != nil) {
customObjectArray = [[NSMutableArray alloc] initWithArray:oldSavedArray];
} else {
customObjectArray = [[NSMutableArray alloc] init];
}
}
确保检查用户默认值返回的数据不是nil
,因为这可能会导致您的应用崩溃。
您需要做的另一件事是使自定义对象符合NSCoder
协议。您可以使用-(void)encodeWithCoder:(NSCoder *)coder
和-(id)initWithCoder:(NSCoder *)coder
方法执行此操作。
答案 1 :(得分:2)
如果要保存到文件(而不是使用NSUserDefaults),可以使用-initWithContentsOfFile:
加载,-writeToFile:atomically:
使用NSArrays保存。
示例:
- (NSArray *)loadMyArray
{
NSArray *arr = [NSArray arrayWithContentsOfFile:
[NSString stringWithFormat:@"%@/myArrayFile", NSHomeDirectory()]];
return arr;
}
// returns success flag
- (BOOL)saveMyArray:(NSArray *)myArray
{
BOOL success = [myArray writeToFile:
[NSString stringWithFormat:@"%@/myArrayFile", NSHomeDirectory()]];
return success;
}
这里有很多关于各种方法的例子:http://www.cocoacast.com/?q=node/167