我想知道是否可以使用NSCoder方法:
- (void)encodeObject:(id)objv forKey:(NSString *)key
编码NSArray或NSDictionary的实例。如果不是,你怎么去编码呢?我正在尝试使用NSKeyedArchived / NSKeyedUnarchiver使用GameKit在手机之间发送数据。我试过它,似乎无法检索我存储在我的数组中的字符串。我创建的数据包类与数据包类型整数一起出现,但不是数组中的数据。
提前致谢!
答案 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应该照顾其余部分。如果您正在执行此操作,那么了解有关类的布局以及在编码/解码时谁在调用谁将会有所帮助。