viewDidLoad に次のコードがあります。
NSManagedObjectContext *moc=[[NSManagedObjectContext alloc]
initWithConcurrencyType:NSMainQueueConcurrencyType];
[moc setParentContext:[AppCoreDataHandler sharedManagedObjectContext]];
self.restroom=[NSEntityDescription insertNewObjectForEntityForName:@"Restroom"
inManagedObjectContext:moc];
self.restroom.coordinate=[((AppDelegate *)[[UIApplication sharedApplication] delegate]) locationManager].location.coordinate;
self.review=[NSEntityDescription insertNewObjectForEntityForName:@"Review"
inManagedObjectContext:moc];
[self.restroom addReviewsObject:self.review];
デバッグ コンソールを使用したテストでは、self.restroom.reviews がレビューを含む NSSet と等しいことが示されています。「viewWillAppear」に到達するまでに、self.restroom.reviews は nil です。コードのどこにもレビューを nil に設定していません。Self.review は常に完全に有効です。それは単に意味がありません!
私はこれを理解しようとして頭がいっぱいです。マルチスレッド コードにすることはできません。プロパティ/関係に他に何も割り当てていません。オブジェクトは弱く保持されておらず、それ自体を解放していません。ただ... 消えてしまいます。なんで?
編集:さらに楽しいことに、値がいつ変更されるかを確認するためにキー値監視を使用しました。
スタック トレースから読み取れることから、viewDidLoad 関数内で変更されています。しかし、コードをステップスルーすると、関数の終了後にキー値の通知が明確に送信されます。