Implicit conversion of a non-Objective-C pointer type 'const char *' to 'NSString *' is disallowed with ARC
时间: 2024-03-09 11:46:24 浏览: 268
这个错误是因为在使用 ARC (Automatic Reference Counting) 的环境下,试图将一个 C 字符串类型的指针(const char *) 直接赋值给 NSString 对象,而 ARC 不支持这种隐式的类型转换。
解决这个问题的方法是将 C 字符串转换为 NSString 对象,可以使用如下方法:
```objective-c
const char *cString = "hello world";
NSString *str = [NSString stringWithUTF8String:cString];
```
这里使用了 NSString 的 `stringWithUTF8String:` 方法将 C 字符串转换为 NSString 对象。如果需要使用其他字符编码,可以更改这里的方法调用。
另外,如果确实需要将 C 字符串类型的指针赋值给 NSString 对象,可以使用 `__bridge` 或 `__bridge_transfer` 进行类型转换,如下所示:
```objective-c
const char *cString = "hello world";
NSString *str = (__bridge NSString *)cString;
```
这里使用了 `__bridge` 将 const char * 类型的指针转换为 NSString * 类型的指针。需要注意的是,这种类型转换不会自动进行内存管理,所以需要手动管理内存。如果需要将 C 字符串类型的指针转换为 NSString 对象并且自动进行内存管理,可以使用 `__bridge_transfer`。
阅读全文