iphone - 自定义托管对象间歇性地卡在关系访问器中

标签 iphone ios ipad core-data relationship

在 iOS 上(使用 Xcode 4、iPad Simulator 4.3),我有一个“文章”实体和一个“作者”实体。有两种关系连接这两者(一篇文章有​​一个“作者”关系[可选,对多],一个作者也有一个“文章”关系[可选,对多])。

如果我从一个空数据库开始(从头开始,从模拟器中删除应用程序并再次点击调试)。它工作正常,我可以毫无问题地将数百个项目添加到数据库中。

但是,如果我首先向数据库添加一些项目,然后停止应用程序(是否按主页按钮)并再次启动(再次点击调试按钮),数据就在那里,我可以很好地“读取”数据,并且我可以很好地向其他实体添加数据。但是当我添加新作者(而不是文章)时,有时新闻会停在我的“Author.m”类(它是 NSManagedObject 的子类)中该函数的第二行:

- (void)addArticlesObject:(Article *)value {    
    NSSet *changedObjects = [[NSSet alloc] initWithObjects:&value count:1];  
    [self willChangeValueForKey:@"articles" withSetMutation:NSKeyValueUnionSetMutation usingObjects:changedObjects];  
    [[self primitiveValueForKey:@"articles"] addObject:value];  
    [self didChangeValueForKey:@"articles" withSetMutation:NSKeyValueUnionSetMutation usingObjects:changedObjects];  
    [changedObjects release];  
}

控制台中没有任何消息(调试器输出),如果我向前迈出一步,我将被发送到 __CFTypeCollectionRetain ,然后获得 EXC_BADACCESS 。

最后一步并不总是相同的,有时它不会返回,CPU 会达到 100%(50% 实际上它是双核机器),直到我点击停止或终止“应用程序”进程(xcode 响应良好) 。

有什么想法吗?

最佳答案

您可能正在看到由两侧对多关系的副作用引起的无限循环,例如当您将 Article 对象添加到 Author 对象时,会导致 Article 对象添加另一个 Author 实例,其中依次添加另一篇文章,依此类推...

这不会立即产生任何错误,因为代码中通常包含很长的循环。您收到的错误表明您在保留集合(数组、字典、集合)对象的 Core Foundation 对象中遇到某种溢出情况。

检查所有自定义访问器是否有副作用,以确保没有触发循环。您可以将日志语句放入访问器中以查看它们何时被调用。这会让你看到循环。

关于iphone - 自定义托管对象间歇性地卡在关系访问器中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5809641/

相关文章:

iphone - 如何将变量传递给 UIAlertView 委托(delegate)?

iphone - 在 iOS 上,为什么绘图不会出现在以下代码中?

iphone - 如何为 CABasicAnimation 设置颜色?

iphone - Collection View iOS 7

iphone - ResKit iOS - 为同一个元素注册多个类

ios - 如何在单元重用方面使用 UITableViewController 新行为初始化单元

ios - 加载一个 View Controller ,然后从内存中删除前一个

iphone - 通过 ASIHTTP 请求并行下载文件的最大数量

iphone - 验证文本字段 : highlighted red border, iPhone

ios - 如何使用 Dropbox API 重新连接应用程序