1

次のエラーが表示されます

-[NSNull isEqualToString:]: unrecognized selector sent to instance 0x3c168090

このコード行で

cell.offerTitle.text = [voucherData objectForKey:@"offer_title"];

誰かが問題を解決するのを手伝ってくれませんか?

ありがとうオリバー

4

4 に答える 4

6

voucherDataNSDictionaryですか?

辞書にが含まれている可能性があり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;
于 2012-12-05T16:36:44.800 に答える
0

ここでのベストプラクティスの1つの候補はisEqual:、ではなくを使用することisEqualToString:です。そうすれば、取得するものが文字列でない場合、エラーは発生せず、同等性テストは適切な順序で失敗します。

一方、それisEqualToString:は良い選択であると主張することができます。なぜなら、取得したものが文字列でない場合、問題を警告するエラーが発生したからです。

編集:しかし、それは間違っています。以下のコメントを参照してください。isEqualToString:メッセージは、OP自体のコードからではなく、UIKitから送信されます。

于 2012-12-05T17:14:58.183 に答える
0

私はノアの答えのためにいくつかの変更を行います

-(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];
于 2013-11-28T15:12:10.750 に答える
-1

コンソールからのその行がおそらくあなたに伝えていることは、" voucherData" はNSDictionaryあなたが想定している " " オブジェクトではないということです。

またofferTitle、セル内の " "UITextFieldも有効であることを確認してください。

于 2012-12-05T16:26:17.920 に答える