首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用NSCoder编码NSArray或NSDictionary

使用NSCoder编码NSArray或NSDictionary
EN

Stack Overflow用户
提问于 2010-02-09 10:39:00
回答 3查看 29.6K关注 0票数 18

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

代码语言:javascript
复制
- (void)encodeObject:(id)objv forKey:(NSString *)key

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

提前感谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-02-09 10:43:50

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

票数 11
EN

Stack Overflow用户

发布于 2010-02-09 10:53:30

如果数组或字典是根对象,则应执行以下操作

代码语言:javascript
复制
NSData * encodedData = [NSKeyedArchiver archivedDataWithRootObject:someArray];

代码语言:javascript
复制
BOOL success = [NSKeyedArchiver archiveRootObject:someArray toFile:filePath];

如果它是自定义类的实例变量,则在-encodeWithCoder:方法中应执行以下操作

代码语言:javascript
复制
[coder encodeObject:someArray forKey:@"someArray"];

然后在-initWithCoder:方法中

代码语言:javascript
复制
someArray = [[coder decodeObjectForKey:@"someArray"] retain];
票数 32
EN

Stack Overflow用户

发布于 2010-02-09 10:53:59

您在数组中存储的是什么类型的对象?确保数组中存储的所有对象都实现NSCoding协议。

票数 21
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2226390

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档