我想知道是否可以使用NSCoder方法:
- (void)encodeObject:(id)objv forKey:(NSString *)key
如何编码NSArray或NSDictionary的实例?如果不能编码,那么该如何处理呢?我试图使用NSKeyedArchived / NSKeyedUnarchiver通过GameKit在手机之间发送数据。我尝试过了,但好像无法检索出存储在我的数组中的字符串。我的数据包类会传递以及数据包类型整数,但好像没有传递数组中的数据。
先行致谢!
我想知道是否可以使用NSCoder方法:
- (void)encodeObject:(id)objv forKey:(NSString *)key
如何编码NSArray或NSDictionary的实例?如果不能编码,那么该如何处理呢?我试图使用NSKeyedArchived / NSKeyedUnarchiver通过GameKit在手机之间发送数据。我尝试过了,但好像无法检索出存储在我的数组中的字符串。我的数据包类会传递以及数据包类型整数,但好像没有传递数组中的数据。
先行致谢!
如果数组或字典是根对象,则应执行
NSData * encodedData = [NSKeyedArchiver archivedDataWithRootObject:someArray];
或者BOOL success = [NSKeyedArchiver archiveRootObject:someArray toFile:filePath];
如果它是自定义类的实例变量,则在 -encodeWithCoder:
方法中处理。
[coder encodeObject:someArray forKey:@"someArray"];
然后在 -initWithCoder:
方法中
someArray = [[coder decodeObjectForKey:@"someArray"] retain];
你要在数组中存储哪种类型的对象?请确保数组中存储的所有对象都实现了NSCoding协议。
NSKeyedArchiver/Unarchiver可以轻松地对NSArray和NSDictionary进行编码和解码。如果您创建的数据包类实现了NSCoding协议,则需要在-encodeWithCoder:
方法中显式调用[encodeObject:
myNsArray
forKey:@"stringsArray"]
(假设myNsArray是您要编码的数据包对象中实例变量的名称)。然后,归档器和NSArray应该会处理其余部分。如果您正在这样做,更多地了解您的类的布局以及在编码/解码时谁在调用谁将会很有帮助。