1

View Conroller をプッシュしてから、セグメント コントローラを介してポップすると、元の状態に戻ります。いくつかの値が変更されます。1 つは距離値 (float) で、もう 1 つはバイナリ データとして保存されるサムネイルです。

他のView Controllerをプッシュする前に、コアデータにこの配列(現在は配列です)を本質的にフリーズするように指示する方法はありますか? たぶんそれを tmpArray にコピーしてから、存在する場合は viewDidAppear にその tmpArray をコピーして戻しますか? 本当にハックに聞こえますが、これを機能させる必要があります。

どうも

編集#1

そこで、問題が発生する場所に関するコードをいくつか示します。したがって、getAllLocationsWithFinished によって self.tmpLocations が変更されているようです。

  //works
  NSLog(@"#1 locations right before call: %@",[self.locations objectAtIndex:2]);
  self.tmpLocations=[[NSArray alloc] initWithArray:[self.locations copy]];
  //works
  NSLog(@"#2 locations right before call: %@",[self.tmpLocations objectAtIndex:2]);

  [[ModelManager sharedModelManager] getAllLocationsWithFinished:^(NSArray* map_locations) 
  {
    // data is off
    NSLog(@"#3 locations right before call: %@",[self.tmpLocations objectAtIndex:2]);
4

1 に答える 1

0

ティンポーン、

これらのアイテムをView Controllerで作成している場合、それらを保存することで、それらがそのまま残ることを保証できます。とはいえ、ここでコアデータがあなたの犯人であるとしたら、私は非常に驚くでしょう. ナビゲーション コントローラーは、Core Data とは直交するテクノロジです。それらは互いに独立しています。

プッシュされたView Controllerが表示されている間、メモリ警告が発生していないことを確信していますか? これは、特に BLOB がナビゲーション コントローラーに関係している場合に頻繁に発生します。コードが値の変化に関与している可能性があります。

GCD を使用して でバックグラウンド タスクを実行している場合-getAllLocationsWithFinished:、バックグラウンド MOC からの保存完了通知を取得していない可能性が最も高いです。メイン スレッドのオブジェクトをバックグラウンドと同期させるには、これをキャッチし、オブジェクトをスレッド間でマージする必要があります。

アンドリュー

于 2012-06-03T14:54:53.207 に答える