ARC 不允许将非 Objective-C 指针类型“const char *”隐式转换为“id”

Posted

技术标签:

【中文标题】ARC 不允许将非 Objective-C 指针类型“const char *”隐式转换为“id”【英文标题】:Implicit conversion of a non-Objective-C pointer type 'const char *' to ‘id’ is disallowed with ARC 【发布时间】:2014-08-04 22:09:58 【问题描述】:

我正在尝试将 NSString 转换为字节数组。然后我需要将字节数组保存在字典中。所以我愿意

[dict setObject:[plainString UTF8String] forKey: key];

但是我得到了编译错误

Implicit conversion of a non-Objective-C pointer type 'const char *' to ‘id’ is disallowed with ARC

【问题讨论】:

我正在使用 AFNetwork 将数据发送到 Google blobstore。我似乎需要字节数组才能成功。 使用 NSString 或 NSData。 见 - ***.com/questions/901357/… - 您可以简单地将您的字符串转换为 NSData,然后您应该能够将其传递给 AFNetworing 【参考方案1】:

NSDictionary 要求键/值是 Objective-C 对象。您是否有理由不能在您尝试生成的字典中使用您的 NSString?

如果您真的只需要原始字节,则需要将这些字节装箱到 NSValueNSData 对象中。

【讨论】:

我正在尝试解决一个更大的问题:***.com/questions/24747809/…【参考方案2】:

如果dictNSDictionary,则不能存储非对象。 Cocoa 数据结构NSMapTable 可以存储非对象指针,也可以将非对象数据包装在NSData 实例中。

我不得不质疑你为什么要这样做。为什么不只存储 NSString 并仅在需要时调用 convert?

【讨论】:

我正在尝试解决一个更困难的问题:***.com/questions/24747809/…

以上是关于ARC 不允许将非 Objective-C 指针类型“const char *”隐式转换为“id”的主要内容,如果未能解决你的问题,请参考以下文章

Objective-C在ARC下,把strong指针设置为nil,请问这样不会不释放指针的内存空间?

Objective-C中,ARC下的 strong和weak指针原理解释

OC加强之ARC

OC基础--ARC的基本使用

使用具有通用 setter 和 ARC 的 Objective-C 动态属性

Objective-C 在自定义方法中将 NSError 指针传递给 NSFileManager