如何将自定义对象的 NSArray 归档到 Objective-C 中的文件

Posted

技术标签:

【中文标题】如何将自定义对象的 NSArray 归档到 Objective-C 中的文件【英文标题】:How to archive an NSArray of custom objects to file in Objective-C 【发布时间】:2011-03-30 10:05:03 【问题描述】:

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

【问题讨论】:

【参考方案1】:

查看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 方法来做到这一点。

【讨论】:

【参考方案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

【讨论】:

以上是关于如何将自定义对象的 NSArray 归档到 Objective-C 中的文件的主要内容,如果未能解决你的问题,请参考以下文章

通过 WatchConnectivity 的 sendMessageData 将自定义对象的 NSArray 作为 NSData 传递

NSKeyedUnarchiver归档

IOS 数据存储(NSKeyedArchiver 归档篇)

ios如何将自定义控制器重定向obj-c代码放在自定义视图中

如何将自定义对象添加到 xib 文件的“对象”部分?

如何将自定义对象的集合存储到 user.config 文件中?