Xcode 为什么我的核心数据对象会丢失它';谁的关系?
我在viewDidLoad中有以下代码:Xcode 为什么我的核心数据对象会丢失它';谁的关系?,xcode,core-data,Xcode,Core Data,我在viewDidLoad中有以下代码: NSManagedObjectContext *moc=[[NSManagedObjectContext alloc] initWithConcurrencyType:NSMainQueueConcurrencyType]; [moc setParentContext:[AppCoreDataHandler sharedManagedObjectContext]]; self.restroom=
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。当我到达“视图将出现”时,self.restroom.reviews为零。我不会在代码中的任何地方将评论设置为零。自我审查在整个过程中保持完全有效。这根本没有道理
我绞尽脑汁想弄明白这件事。它不可能是任何多线程代码,我没有为属性/关系分配任何其他内容,对象没有弱保留和释放自身,它只是。。。消失。为什么?
编辑:更有趣的是,我使用键值观察来检查值何时更改
根据我对堆栈跟踪的了解,它在viewDidLoad函数中被更改。但是,当我逐步阅读代码时,键值通知会在函数结束后清楚地发送 纯粹是愚蠢的运气(阅读:hrm,我想知道是否…不。那么好吧。我想知道是否…并重复大约2亿次迭代),我找到了答案
我为这些对象创建的子MOC不是在最后一次引用它之后(我希望ARC会这样做),而是在函数的末尾被释放。当它死亡时,它并没有解除分配给它的对象,但它确实剥夺了它们之间的关系。(我猜,虽然看起来NSSet提供了这些功能,但它实际上是MOC的一部分)