我正在尝试将NSString值传递给char类型变量,但我收到此错误 -
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFString charValue]: unrecognized selector sent to instance 0x1f8dce60'
*** First throw call stack:
(0x357ae56b 0x35a8e97f 0x357b24fb 0x357b0c0d 0x35702e68 0x3d233 0x379d1 0x31cd2ead 0x3633accb 0x37235 0x39851 0x370c1 0x36c33 0x331eb 0x363575b5 0x362a8991 0x362a88ad 0x31c11acf 0x31c111bb 0x31c39323 0x356f52e1 0x31c39783 0x31b9dc65 0x3577f143 0x3577e9a9 0x3577d6ef 0x356fbc1d 0x356fbaa9 0x385bf33b 0x36865535 0x26ffd 0x344c6b20)
libc++abi.dylib: terminate called throwing an exception
我在他们的h文件中声明它
char storageChar;
//..
@property (assign) char storageIcon;
然后在m我从NSDictionary条目调用一个字符串并试图将它传递给像这样的字符
// initalize storageChar - char
storageChar = [[tempDict valueForKey:@"STORAGE"] charValue];
一旦线程运行,应用程序崩溃,有人可以告诉我我做错了什么,因为在构建期间没有警告或错误...
答案 0 :(得分:2)
问题在于,正如错误所述,NSString
[tempDict valueForKey:@"STORAGE"]
来自charValue
的方法不响应方法NSString
。如果您查看charValue
的文档,则无法在任何地方找到[[tempDict valueForKey:@"STORAGE"] UTF8String]
。假设您在char
数组中使用UTF-8编码,那么您可能想要的是storageIcon
。您也可能希望将char数组声明为数组,除非您的意思是[tempDict valueForKey:@"STORAGE"]
只是一个字符。
为什么不在构建中收到警告或错误?问题是编译器无法知道从charValue
返回什么类型的对象。所以它必须接受你的话,对象将响应{{1}}。在运行时它会发现你错了并给你一个错误。这是像Objective-C这样非常动态的语言的标准陷阱。