将 NSString 存储在 NSDIctionary 中时,变量不是 CFString

Posted

技术标签:

【中文标题】将 NSString 存储在 NSDIctionary 中时,变量不是 CFString【英文标题】:Variable is not a CFString when storing NSString in a NSDIctionary 【发布时间】:2012-06-18 11:56:57 【问题描述】:

我将聊天应用程序中的消息存储在 NSDictionary 中。但是,如果我这样做了

NSString *msg = [[message elementForName:@"body"] stringValue];
[m setObject:msg forKey:@"msg"];

它抱怨说(调试时)“变量不是 CFString”并且 msg 变为 nil。所以,我把它改成:

CFStringRef cfstring=(__bridge CFStringRef) msg;
[m setObject:(__bridge NSString*) cfstring forKey:@"msg"];

但是“msg”仍然是 nil,它不应该是 nil。

这只发生在它发送消息时。当它收到它们时......没有问题!

有什么帮助吗?

【问题讨论】:

elementForName: 返回什么? 收到的邮件正文。 但它是一个字符串吗?当身体空虚时会发生什么?等等。 是的,它是一个字符串。当它尝试向字典添加空值时,它会崩溃。 我在发送前检查发送的字符串的值是否>1。 【参考方案1】:

您不应该使用objectForKey 而不是elementForName 吗?如果对象是NSString,则存储时您不需要使用stringValue。您绝对不必担心免费桥接到 CFStringRef,这只是编译器看到的底层 C 数据类型

【讨论】:

以上是关于将 NSString 存储在 NSDIctionary 中时,变量不是 CFString的主要内容,如果未能解决你的问题,请参考以下文章

将 NSNumber* 的 NSArray 存储为 Core Data 中的 NSString

将 NSString 中的文件名转换为 UIImage 以获取存储在资产库中的照片

AFNetworking 2.0.3 不适用于 iOS 6

创建持久存储时 NSPersistentDocument 崩溃

InvalidFirebaseData Swift 3 只能存储 NSNumber、NSString、NSDictionary 和 NSArray 类型的对象。

NSDictionary:将 NSString 键转换为小写以在其上搜索字符串