使用NSCoder对NSArray或NSDictionary进行编码

Ron*_*ear 18 iphone nskeyedarchiver nsarray gamekit

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

- (void)encodeObject:(id)objv forKey:(NSString *)key
Run Code Online (Sandbox Code Playgroud)

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

提前致谢!

Cor*_*ger 32

如果数组或字典是您应该执行的根对象

NSData * encodedData = [NSKeyedArchiver archivedDataWithRootObject:someArray];
Run Code Online (Sandbox Code Playgroud)

要么

BOOL success = [NSKeyedArchiver archiveRootObject:someArray toFile:filePath];
Run Code Online (Sandbox Code Playgroud)

如果它是自定义类的实例变量,则该-encodeWithCoder:方法应该这样做

[coder encodeObject:someArray forKey:@"someArray"];
Run Code Online (Sandbox Code Playgroud)

然后在-initWithCoder:方法中

someArray = [[coder decodeObjectForKey:@"someArray"] retain];
Run Code Online (Sandbox Code Playgroud)


Ole*_*ann 21

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


Ben*_*tto 10

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