18

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

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

编码 NSArray 或 NSDictionary 的实例。如果不是,您将如何对它们进行编码?我正在尝试使用 NSKeyedArchived / NSKeyedUnarchiver 在使用 GameKit 的手机之间发送数据。我试过了,似乎无法检索存储在数组中的字符串。我制作的数据包类与数据包类型整数一起出现,但不是数组中的数据。

提前致谢!

4

3 回答 3

32

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

NSData * encodedData = [NSKeyedArchiver archivedDataWithRootObject:someArray];

或者

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

如果是自定义类的实例变量,在-encodeWithCoder:方法中应该做

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

然后在-initWithCoder:方法中

someArray = [[coder decodeObjectForKey:@"someArray"] retain];
于 2010-02-09T02:53:29.580 回答
21

你在数组中存储什么样的对象?确保存储在数组中的所有对象都实现了 NSCoding 协议。

于 2010-02-09T02:53:59.223 回答
11

NSKeyedArchiver/Unarchiver 应该毫无问题地对 NSArrays 和 NSDictionaries 进行编码和解码。如果您创建的数据包类实现了 NSCoding 协议,则需要显式调用您的方法(假设myNsArray是您要编码的数据包对象中的实例变量的名称)。但是归档器和 NSArray 应该负责其余的工作。如果您正在这样做,那么了解更多有关您的类的布局以及编码/解码时谁在调用谁会很有帮助。[encodeObject:myNsArrayforKey:@"stringsArray"]-encodeWithCoder:

于 2010-02-09T02:43:49.937 回答