1

私は異なるデータを持つ配列を持っています.1つは摂氏で記録された温度です。ユーザーがデフォルト設定を華氏に変更すると、collectionView に表示される情報の配列を変更する必要があります。プログラムは適切にコンパイルされますが、ビューが読み込まれると、エラーなしでコンパイラがクラッシュし、行が緑色で強調表示され、右隅に Thread 1: breakpoint1.1 と表示されます。

強調表示されている行は次のとおりです

[dict setObject:[NSNumber numberWithInteger:number] forKey:@"temp"];

私はまた、問題を回避するためだけに成功しなかっただけです:

[dict setObject:@"11" forKey:@"temp"];

配列をループしてデータを変更するための私のコードは次のとおりです。

changedArray = [[NSMutableArray alloc] initWithCapacity:50];
for (NSMutableDictionary *dict in locationArray) {
    if ( [[dict objectForKey:@"site"] isEqual:[defaults objectForKey:@"location"]] ) {
        NSInteger number = [[dict objectForKey:@"temp"] integerValue];
        number = ((number * 1.8) + 32);
        [dict setObject:[NSNumber numberWithInteger:number] forKey:@"temp"];
        [changedArray addObject:dict];
    }
}

dict の温度値を変更する 3 行のコードを削除すると、正しくコンパイルされて実行されます。このios noobの内部に感謝します。:-)

4

1 に答える 1

2

NSDictionary配列内の辞書インスタンスはすべて不変オブジェクトだと思います。タイプキャストだけでは、変更可能なものにはなりません。以下を試してください

  1. 配列を反復処理する
  2. 正しい辞書を見つける
  3. ミュータブルを形成するNSMutableDictionary
  4. 変更可能なものを編集する
  5. 配列に更新します(配列も変更可能なものである必要があります)

しかし、私のアドバイスは、ユーザーがより多く使用する傾向がある単位である、常に 1 つの単位で温度を維持することです。表示する必要がある場合にのみ、ユーザーが選択した単位を確認して計算を行い、更新します。

于 2013-10-23T07:12:17.833 に答える