我在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函数中被更改。但是当我逐步执行代码时,键值通知会在函数结束后清楚地发送。
答案 0 :(得分:1)
纯粹的愚蠢运气(读:hrm,我想知道是否......没有。那好吧。我想知道是否......并重复大约两次bazillions迭代),我想通了。
我为这些对象创建的子MOC在最后一次引用之后不会被释放(这是我期望ARC做的事情),而是在函数结束时。当它死亡时,它没有释放它所分配的对象,但它 剥夺了它们之间的关系。 (我会猜测,虽然它看起来像NSSet提供的那些,但它实际上是MOC的内容)。