使用NSCoder对NSArray或NSDictionary进行编码

时间:2010-02-09 02:39:00

标签: iphone nsarray nskeyedarchiver gamekit

我想知道是否可以使用NSCoder方法:

- (void)encodeObject:(id)objv forKey:(NSString *)key

编码NSArray或NSDictionary的实例。如果不是,你怎么去编码呢?我正在尝试使用NSKeyedArchived / NSKeyedUnarchiver使用GameKit在手机之间发送数据。我试过它,似乎无法检索我存储在我的数组中的字符串。我创建的数据包类与数据包类型整数一起出现,但不是数组中的数据。

提前致谢!

3 个答案:

答案 0 :(得分:31)

如果数组或字典是你应该做的根对象

NSData * encodedData = [NSKeyedArchiver archivedDataWithRootObject:someArray];

BOOL success = [NSKeyedArchiver archiveRootObject:someArray toFile:filePath];

如果它是自定义类的实例变量,则应在-encodeWithCoder:方法中执行

[coder encodeObject:someArray forKey:@"someArray"];

然后在-initWithCoder:方法

someArray = [[coder decodeObjectForKey:@"someArray"] retain];

答案 1 :(得分:21)

您在阵列中存储了哪些对象?确保存储在阵列中的所有对象都实现了NSCoding协议。

答案 2 :(得分:10)

NSKeyedArchiver / Unarchiver应该编码和解码NSArrays和NSDictionaries没有问题。如果您创建的数据包类实现了NSCoding协议,则需要在[encodeObject:方法中明确调用myNsArray forKey:@"stringsArray"] -encodeWithCoder:(假设 myNsArray 是要编码的数据包对象中的实例变量的名称。但是归档者和NSArray应该照顾其余部分。如果您正在执行此操作,那么了解有关类的布局以及在编码/解码时谁在调用谁将会有所帮助。