Coredata - “NSObjectInaccessibleException - CoreData 无法完成错误”

2024-01-07

我是核心数据的新手,仍在弄清楚具体细节,这个错误已经困扰我几个小时了,我似乎找不到解决方案。任何帮助是极大的赞赏。

问题是这样的

我有两个视图,它们从服务器获取数据并更新 UI。我已经这样设置流程了

view1 -> 从服务器发送 HTTP Req - 接收回调 -> 将数据保存到 Coredata -> 从 Core Data 读取并显示在 UI 上(回调和保存/读取 Coredata 发生在 ViewController 中)

view2 -> 从服务器发送 HTTP Req - 接收回调 -> 将数据保存到 Coredata -> 从 Core Data 读取并显示在 UI 上(回调和保存/读取 Coredata 发生在 ViewController 中)

视图 2 每 3 秒重复一次此过程,因为这是一个自动刷新屏幕。

问题是每当我尝试在视图 1 和视图 2 之间快速切换时,它就会导致应用程序崩溃并出现上述错误。如果我在每个视图上等待几秒钟(等待从服务器获取数据),它就可以正常工作。我是否做错了什么,我需要修改什么?

- (void) refreshData {
    [super refreshData];
    [[UserDataFactory sharedSingleton] refreshLoggedInUserDataAndRespondTo:self user:self.user];
}

- (BOOL) refreshDataCallback:(QExtendedHTTPOperation*)responseOperation {
    [self saveToCoreData: responseOperation.responseArray];
    NSMutableArray *tmp = [[NSMutableArray alloc] initWithArray:[self readFromCoreData]];
    [self setData: tmp];
    [tmp release];
    [self.tableView reloadData];
    return YES;
}

- (void) saveToCoreData:(NSArray *) responseArray{
    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
    NSEntityDescription *entity = [NSEntityDescription entityForName:@"CoreView1" inManagedObjectContext:self.managedObjectContext];
    [fetchRequest setEntity:entity];
    [fetchRequest setReturnsObjectsAsFaults:NO];
    NSError *error;
    NSArray *items = [self.managedObjectContext executeFetchRequest:fetchRequest error:&error];
    [fetchRequest release];

    for (NSManagedObject *managedObject in items) {
            [self.managedObjectContext deleteObject:managedObject];
    }

    for (int i=0; i<[responseArray count]; i++) {
            CoreView1 *coreView1_ = [NSEntityDescription insertNewObjectForEntityForName:@"CoreView1" inManagedObjectContext:self.managedObjectContext];
            coreView_.id = [[responseArray objectAtIndex:i] id];    
            [self.managedObjectContext insertObject:coreView1_];
    }
    [self saveContext:self.managedObjectContext];
}

- (NSArray *) readFromCoreData{ 
    NSEntityDescription *entity = [NSEntityDescription entityForName:@"CoreView1" inManagedObjectContext:self.managedObjectContext];
    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
    [fetchRequest setEntity:entity];
    [fetchRequest setReturnsObjectsAsFaults:NO];
    NSError *error;
    NSMutableArray *fetchedObjects = [[self.managedObjectContext executeFetchRequest:fetchRequest error:&error] mutableCopy];
    [fetchRequest release];
    return [fetchedObjects autorelease];
}

这是我正在使用的示例代码,即使 View2 也具有相同的回调并遵循相同的流程。

Edit 1忘记之前提到这一点,我总是在 saveToCoreData 方法中遇到错误。另外,还要注意的一件事是,如果我删除删除对象的代码,一切都会正常工作(在保存更新的数据之前,我需要从表中删除所有现有数据)。但不确定发生了什么。


删除删除代码使其起作用的原因是,您要删除持久存储中的数据,而无需更新仍具有与内存中该数据相关联的托管对象实例的其他视图。请记住,虽然 Core Data 处理对象,但每个对象后面都必须在数据库中有一行。当您删除该行时,核心数据会生气。

因此,要解决此问题并仍然删除您的数据,您应该听取您的意见NSManagedObjectContextWillSaveNotification and/or NSManagedObjectContextDidSaveNotification通知并使用商店中最新版本的数据更新您的视图。此时,您应该丢弃视图所持有的任何 Core Data 对象,并从存储中重新加载它们。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Coredata - “NSObjectInaccessibleException - CoreData 无法完成错误” 的相关文章

随机推荐

  • 将 EXE 输出写入批处理文件

    我有一个 EXE 其输出值为 0 1 EXE 将通过批处理文件调用 我想要批处理文件运行 EXE 并写入获得的输出 这怎么可能 任何帮助 将不胜感激 我假设您想要捕获 EXECUTIVE 的输出并处理该值 而不是仅仅打印该值 以下是如何捕获
  • pywinauto 未检测到子窗口

    我正在使用最新版本 迄今为止 的 pywinauto 还使用 PyInspect uia 来识别控件 我正在自动化应用程序上的控件 该过程的一部分是检查触发窗口从菜单选择 如 编辑 gt 设置 中出现后弹出的窗口上的几个框 问题是 pywi
  • 如何合并两个 JObject? [复制]

    这个问题在这里已经有答案了 我有第一个 json data id id1 field field1 paging prev link1 第二个 data id id2 field field2 paging prev link2 我想合并
  • Java swing 动画看起来不稳定。如何让它看起来专业?

    更新 半复杂动画 摇摆计时器 火车残骸 问题的最终根源是 java 计时器 无论是 swing 版本还是实用程序版本 它们不可靠 尤其是在跨操作系统比较性能时 通过实现普通线程 程序可以在所有系统上运行得非常流畅 http zetcode
  • 呈现为下拉列表的智能字段不显示说明

    我有一个智能字段 我定义如下
  • pandas read_excel 同一张纸上的多个表

    是否可以使用 pandas 从 Excel 工作表文件中读取多个表 就像是 读取 table1 从第 0 行到第 100 行 读取 table2 从第 102 行到第 202 行 我编写了以下代码来自动识别多个表 以防您需要处理许多文件并且
  • 配置不正确:包含的 urlconf .urls 中没有任何模式

    我有一个 django 1 6 x 项目 可以在开发服务器上正常运行 但在 Ubuntu 12 04 3 上的 Apache2 2 2 22 1 和 mod wsgi 3 3 4 下失败 并出现错误 配置不正确 包含的 urlconf er
  • Bash 波形符扩展

    是否可以添加 bash 用于波浪号扩展的规则 我想让 data 扩展到 data users me scratch 扩展到 data scratch me 等等 这可能吗 还是 bash 对 的控制太紧 Thanks Andrew 波形符扩
  • 将对象添加到 NSMutableArray 时遇到问题

    我在将对象添加到 NSMutableArray array 时遇到问题 Controller m import Controller h implementation Controller void parser NSString stri
  • 如何使用canvas在单页中绘制三个三角形?

    function areaval var equation number val var secod acure val var thrd pmet val var frd cmet val var a Math abs parseInt
  • std::string 复制构造函数在 GCC 4.1.2 中不深入?

    我想知道我是否误解了什么 复制构造函数来自std string not复制其内容 string str1 Hello World string str2 str1 if str1 c str str2 c str Same pointers
  • 将 Spring 应用程序从 XML 迁移到注释

    我继承了一个 Spring 3 应用程序 它使用 XML 文件来定义 Bean 并将其连接在一起 我知道从 Spring 2 开始 这些大部分都可以用注释替换 我希望 Spring 能够 通过扫描某些包中的类来检测 bean 无论使用什么注
  • UISlider 释放触摸时过于敏感

    当释放 UISlider 上的触摸时 滑块的值会发生轻微且无法控制的变化 它非常敏感 甚至当手指从屏幕上松开时它就会发生变化 如何才能让用户可以毫无问题地设置他想要的值 这就是我创建 UISlider 的方式 UISlider slider
  • 如何使用 javascript 调整 Base64 编码的数据 URI PNG 的大小?

    我有一个 Base64 编码的 PNG 从 Web 套接字中挤出到网页中 我使用 Data URI 显示该网页 img src javascript 或其某些风格是否有一种方法可以将我收到的图像大小调整为较小的 base64 数据 URI
  • Unity 5 在 Mac OSX Yosemite 下崩溃

    有人在 Mac OSX Yosemite 上遇到过这个问题吗 构建后项目大小超过 250Mb 电脑参数 MacBook 13 i7 CPU 16Gb RAM 1 5GB GPU EDIT Mac OSX 的完整崩溃日志 http paste
  • 将参数传递给 xslt 中的 javascript 脚本

    是否可以在 XSLT 中处理 javascript 函数的参数 其中脚本位于标签之间 如果可能的话有人可以举个例子 谢谢 我认为您对这两件事感到困惑 XSLT 是用于 在本例中 生成 HTML javascript 的东西 一旦浏览器接收到
  • 带 tab-id 的 RedirectToAction()

    我在 ASP NET MVC 中有一个 Web 应用程序 其中有一个带有表单的 jqueryUI 选项卡 当我提交时 我想返回到打开的选项卡 使用 RedirectToAction 我创建了 url www foo com CV edit
  • 如何禁用 .htaccess 文件中的 mod_security?

    我们怎样才能禁用mod security通过使用 htaccessApache 服务器上的文件 我在我的个人域上使用 WordPress 并发布了一篇帖子 其中内容包含一些代码块 并且按照我的托管提供商的说法mod security出现错误
  • Sublime Text 3 中的 Qt 构建系统不起作用

    我有以下无法正常工作的构建系统文件 cmd qmake project cmd qmake cmd make working dir project path folder 没有生成任何文件 通常应创建以下文件 qmake project
  • Coredata - “NSObjectInaccessibleException - CoreData 无法完成错误”

    我是核心数据的新手 仍在弄清楚具体细节 这个错误已经困扰我几个小时了 我似乎找不到解决方案 任何帮助是极大的赞赏 问题是这样的 我有两个视图 它们从服务器获取数据并更新 UI 我已经这样设置流程了 view1 gt 从服务器发送 HTTP