我在 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 ANYWHERE。Self.review 始终保持完全有效。这根本没有意义!
我在我的智慧尽头试图弄清楚这一点。它不能是任何多线程代码,我没有为属性/关系分配任何其他内容,对象没有弱保留并释放自身,它只是......消失了。为什么?
编辑:更有趣的是,我使用键值观察来检查值何时更改。
根据我对堆栈跟踪的了解,它正在 viewDidLoad 函数内部进行更改。但是当我单步执行代码时,在函数结束后会清楚地发送键值通知。