-2

私は自分のデータでいっぱいの配列を取得しようとしています。これを実行すると、ここに含まれていない配列を呼び出すときに BAD_ACCESS エラーが発生し続けますが、そのコードをコメントアウトしてログに呼び出してみました。それでも BAD_ACCESS エラーが発生します。配列は、数値である 1 つのキーを含むディクショナリに格納されます。ここで何が間違っているのかわかりません。

ISData *is = [[ISData alloc] init];
NSDictionary *dic = [is getData:@"right" : isNumber];

NSArray *array = [[NSArray alloc] initWithArray:[dic valueForKey:@"2"]];

NSString *out = [array objectAtIndex:0];

ディクショナリの作成方法:

NSNumber* key = [NSNumber numberWithInt:isNumber];
NSArray *values = [NSArray arrayWithObjects:[NSString stringWithUTF8String:name], [NSString stringWithUTF8String:desc], [NSString stringWithUTF8String:intent], nil];

[dic setObject:values forKey:key];
4

2 に答える 2

0

クラッシュする場所を正確に述べておらず、ここには明らかなクラッシュのバグがないため、実際の問題を診断するのは困難です. これは、提示したコードの外にあるメモリ管理の問題である可能性があります。しかし、ここで疑わしいことがいくつか起こっています。

  1. 電話[MyClass alloc]なしで裸になることはありません。-initinit は、新しいオブジェクトのセットアップを担当するスーパーの init を呼び出す必要があります。

  2. あなたの-valueForKey:はずです-objectForKey:。この場合、違いはおそらく重要ではありませんが、前者は、使用していない「KVC」コーディングに使用されます。オブジェクトとして設定した場合は、オブジェクトとして取得します。

  3. 辞書へのキーとしてのあなた@"2"の入力は、NSNumber と一致しません。NSNumbers は数値の文字列バージョンではないため、そこに値が見つかる可能性はほとんどありません。代わりに、同じ[NSNumber numberWithInt:2]パターンを使用してください。

于 2012-08-03T17:47:52.083 に答える
0

配列が空である可能性が最も高いです。NSLog(@"count = %d", array.count);その場合は印刷してみてください。

dicコードの 2 番目のブロックに設定されている場合NSDictionary *dic = [is getData:...]、最初のブロックにあるものは何ですか?

また、アレイを直接セットアップできない理由はありますか? キーが 1 つしかない辞書を使用する理由はありますか?

于 2012-08-03T17:46:50.567 に答える