0

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];

スレッドがこれを実行すると、アプリがクラッシュします。ビルド中に警告やエラーが発生しないため、誰かが私が間違っていることを教えてください...

4

1 に答える 1

2

問題は、エラーが示すように、NSStringyou get from[tempDict valueForKey:@"STORAGE"]が method に応答しないことcharValueです。ドキュメントを調べても、どこNSStringにも見つかりませんcharValue。配列[[tempDict valueForKey:@"STORAGE"] UTF8String]でUTF-8エンコーディングを使用していると仮定すると、おそらく必要なのは です。また、単一の文字であるcharという意味でない限り、char 配列を配列として宣言することもできます。storageIcon

ビルドで警告やエラーが発生しなかったのはなぜですか? 問題は、コンパイラが から返されるオブジェクトの型を知る方法がないこと[tempDict valueForKey:@"STORAGE"]です。したがって、オブジェクトが応答することについては、あなたの言葉を受け入れる必要がありますcharValue。実行時に間違っていることがわかり、エラーが発生します。これは、Objective-C のような非常に動的な言語の標準的な落とし穴です。

于 2012-08-10T02:55:52.030 に答える