使用NSCoder对NSArray或NSDictionary进行编码

18

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

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

如何编码NSArray或NSDictionary的实例?如果不能编码,那么该如何处理呢?我试图使用NSKeyedArchived / NSKeyedUnarchiver通过GameKit在手机之间发送数据。我尝试过了,但好像无法检索出存储在我的数组中的字符串。我的数据包类会传递以及数据包类型整数,但好像没有传递数组中的数据。

先行致谢!


这是一个自定义的NSManagedObject.... 我认为我需要使用XML或JSON来完成,但我需要学习一下D: - Aditya Vaidyam
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];

21

你要在数组中存储哪种类型的对象?请确保数组中存储的所有对象都实现了NSCoding协议。


11

NSKeyedArchiver/Unarchiver可以轻松地对NSArray和NSDictionary进行编码和解码。如果您创建的数据包类实现了NSCoding协议,则需要在-encodeWithCoder:方法中显式调用[encodeObject:myNsArrayforKey:@"stringsArray"] (假设myNsArray是您要编码的数据包对象中实例变量的名称)。然后,归档器和NSArray应该会处理其余部分。如果您正在这样做,更多地了解您的类的布局以及在编码/解码时谁在调用谁将会很有帮助。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接