从 NSKeyedArchiver 中提取 NSString

Posted

技术标签:

【中文标题】从 NSKeyedArchiver 中提取 NSString【英文标题】:Extracting NSString from NSKeyedArchiver 【发布时间】:2012-08-08 14:10:50 【问题描述】:

我正在尝试,如下所示:

NSMutableData *data = [[NSMutableData alloc] init];
NSKeyedArchiver *coder = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data];
[coder encodeInt:1 forKey:@"myField"];
[coder finishEncoding];

NSString *myString = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
NSLog(@"%@", myString);

问题是 myString 为 nil(NSLog 打印 '(null)')。上面的代码有什么问题?

我读过的其他帖子提到这通常是由于编码错误(即 NSMutableData 使用与 UTF-8 不同的编码)。我已经尝试了所有不同类型的编码,但仍然没有运气。

【问题讨论】:

【参考方案1】:

我没有看到您在哪里对字符串进行编码。通常您会使用NSKeyedArchiverNSString 进行编码,然后使用NSKeyedUnarchiver 将其取消归档。看起来您并不了解这一切是如何运作的。我推荐阅读archiving using Obj-C。

【讨论】:

谢谢,我查看了那个链接,它解释了如何使用 NSKeyedArchiver archiveRootObject:toFile: 将编码数据输出到文件中。但是,我想将对象的字符串表示形式转换为 NSString 。根据文档,NSString initWithData:encoding: 方法应该可以解决问题(即获取 NSData 并从中创建一个 NSString)。 只是为了检查我是否理解正确:我正在使用 NSKeyedArchiver 对键“myField”编码一个 int。 NSKeyedArchiver 将编码数据输出到 NSMutableData 'data'。然后我使用“数据”变量来初始化一个 NSString。需要指定编码,以便运行时知道如何将数据转换为字符串(即使用指定的字符串编码,可以是 UTF-8、ASCII 或无数其他编码)。这听起来对吗? 我的最终目标是将对象转换为 JSON 字符串表示形式并将其发送到 RESTful Web 服务。我知道这个 KeyedArchiver 不会转换为 JSON,但我想我会先尝试理解这个。 如果是这种情况,您可能应该完全跳过这个。使用 JSONKit 非常容易使用 JSON。您需要做的就是创建NSMutableDictionaries,然后您可以将其转换为 JSON 字符串。 我会试一试的。我希望避免使用第三方库,认为由于 ios 是为移动设备(经常使用 Web 服务)设计的,所以它是易于使用的内置功能。谢谢你的建议。

以上是关于从 NSKeyedArchiver 中提取 NSString的主要内容,如果未能解决你的问题,请参考以下文章

NSData 从 NSKeyedArchiver 到 NSString

linux NSS

Swift iOS ARKit 从文件 NSKeyedUnarchiver NSKeyedArchiver 加载 ARWorldMap 数据

是否可以使用 NSKeyedArchiver 来存储动画 UIImage?

PHP CURL“NSS:找不到客户端证书(未指定昵称)”问题

如何在 iOS 中使用 NSKeyedArchiver 将已写入文件系统的 Flutter 中的文件作为字符串读取?