iphone - 将 NSString 传递给 charValue

标签 iphone ios nsstring char

我试图将 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 条目中调用一个字符串,并尝试像这样将它传递到 char 中

// initalize storageChar - char
    storageChar = [[tempDict valueForKey:@"STORAGE"] charValue];

一旦线程运行此应用程序崩溃,有人可以告诉我我做错了什么,因为在构建期间没有警告或错误...

最佳答案

问题是,如错误所述,您从 [tempDict valueForKey:@"STORAGE"] 获得的 NSString 不响应方法 字符值。如果您查看 NSString 的文档,您不会在任何地方找到 charValue。您可能想要的是 [[tempDict valueForKey:@"STORAGE"] UTF8String],假设您在 char 数组中使用 UTF-8 编码。您可能还想将 char 数组声明为数组,除非您的意思是 storageIcon 只是一个字符。

为什么在构建中没有收到警告或错误?问题是编译器无法知道将从 [tempDict valueForKey:@"STORAGE"] 返回什么类型的对象。所以它只需要相信你的话,对象将响应 charValue。在运行时它发现你错了并给你一个错误。这是像 Objective-C 这样非常动态的语言的标准陷阱。

关于iphone - 将 NSString 传递给 charValue,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11894805/

相关文章:

objective-c - 如何创建包含文本和图像的自定义文件类型?

ios - 使用 CHCSVParser 解析 NSString 返回 nil

iphone - UITableView 在顶部添加行

iphone - 每分钟点击次数 iOS 编程

iphone - 更改 UINavigationController 推送动画的持续时间

ios - 实现 UIGestureRecognizerDelegate

objective-c - 避免 UIKeyboard 和自动布局

iphone - iPhone应用程序的openframeworks库问题仅Mac应用程序不存在

iphone - 将带有 NSNotificationCenter 的对象传递给其他 View

iphone - NSData 到 NString 转换问题