0

私はNSDictionaryにデータを入力し、辞書で計算を行うこのアプリを持っています。

            tmp = nil;
            tmp = [singleEvent objectForKey:@"start_date"];

            if(tmp == nil)
            {
                startDate = [dateFormatter dateFromString:@"1800/1/1 12:00:00"];
            }
            else
            {
                startDate = [dateFormatter dateFromString:tmp];
            }

tmp は NSString オブジェクトで、singleEvent は NSDictionary です。どちらも別の場所で宣言されています。簡単にするために、コードのその部分は含めませんでした。

ディクショナリのキー「start_date」には、文字列形式の日付が含まれることもあれば、null になることもあります。

nullになる条件を処理しましたが、コードがその行にヒットすることはありません。tmp が null の場合でも、実行が else 部分に移動することがデバッグによってわかりました。

デバッグ モードで tmp を監視すると、次のようになります。

tmp = (NSNull *)

しかし、それでもブロックがヒットします。 そのため、常に null ポインター例外が発生します。

4

4 に答える 4

1

NSNull は nil とは別のものです。おそらくこれはうまくいくでしょう:

if ( [[NSNull null] isEqual:tmp] ) { 
于 2013-06-15T14:15:11.943 に答える
-1

もう少し小さくしてみませんか?また、あなたの問題は、valueForKeyではなくobjectForKeyを使用していることだと思います。valueForKeyはNilを返します。

startDate = [dateFormatter dateFromString:@"1800/1/1 12:00:00"];

if([singleEvent valueForKey:@"start_date"])
        startDate = [dateFormatter dateFromString:[singleEvent valueForKey:@"start_date"]];

NSLog(@"%@", startDate);
于 2013-06-15T14:21:06.603 に答える