次のエラーが表示されます
-[NSNull isEqualToString:]: unrecognized selector sent to instance 0x3c168090
このコード行で
cell.offerTitle.text = [voucherData objectForKey:@"offer_title"];
誰かが問題を解決するのを手伝ってくれませんか?
ありがとうオリバー
次のエラーが表示されます
-[NSNull isEqualToString:]: unrecognized selector sent to instance 0x3c168090
このコード行で
cell.offerTitle.text = [voucherData objectForKey:@"offer_title"];
誰かが問題を解決するのを手伝ってくれませんか?
ありがとうオリバー
voucherData
NSDictionaryですか?
辞書にが含まれている可能性がありNSNull
、辞書がオブジェクトを検索しようとすると、offer_title
問題が発生します。
もう1つの可能性は、[voucherData objectForKey:@"offer_title"]
を返す[NSNull null]
ことであり、文字列の代わりにそれを渡そうとすると、ラベルがバーフィングします。
にブレークポイントを設定しobjc_exception_throw
てスタックトレースを読み取ってみてください。これにより、何が起こっているのかをより正確に把握できます。
追加した:
id value = [voucherData objectForKey:@"offer_title"];
if ([value isKindOfClass:[NSNull class]])
cell.offerTitle.text = @"";
else
call.offerTitle.text = value;
また
id value = [voucherData objectForKey:@"offer_title"];
cell.offerTitle.text = [value isKindOfClass:[NSNull class]] ? @"" : value;
ここでのベストプラクティスの1つの候補はisEqual:
、ではなくを使用することisEqualToString:
です。そうすれば、取得するものが文字列でない場合、エラーは発生せず、同等性テストは適切な順序で失敗します。
一方、それisEqualToString:
は良い選択であると主張することができます。なぜなら、取得したものが文字列でない場合、問題を警告するエラーが発生したからです。
編集:しかし、それは間違っています。以下のコメントを参照してください。isEqualToString:
メッセージは、OP自体のコードからではなく、UIKitから送信されます。
私はノアの答えのためにいくつかの変更を行います
-(NSDictionary*)safeData:(NSDictionary*)dict{
NSMutableDictionary *dictionary = [NSMutableDictionary dictionaryWithDictionary:dict];
NSArray *keys = dictionary.allKeys;
for (int i = 0; i < keys.count; i++){
id value = [dictionary objectForKey:[keys objectAtIndex:i]];
// you can add recursive here
value = [value isKindOfClass:[NSNull class]] ? @"" : value;
[dictionary setObject:value forKey:[keys objectAtIndex:i]];
}
return dictionary; }
と使用
dictionary = [self safeData:dictionary];
コンソールからのその行がおそらくあなたに伝えていることは、" voucherData
" はNSDictionary
あなたが想定している " " オブジェクトではないということです。
またofferTitle
、セル内の " "UITextField
も有効であることを確認してください。