4

你能告诉我在Objective-C中归档自定义对象的NSArray的语法或任何示例程序吗?

4

2 回答 2

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 *)coderand-(id)initWithCoder:(NSCoder *)coder方法执行此操作。

于 2010-08-16T13:20:32.320 回答
2

如果你想保存到一个文件(而不是使用 NSUserDefaults),你可以使用 NSArrays-initWithContentsOfFile:来加载和-writeToFile:atomically:保存。

例子:

- (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

于 2010-08-17T11:04:59.907 回答