CoreData 无法完成以下错误:

2024-02-21

我有一个非常烦人的问题,我似乎无法解决。

当我发送一条消息并保存到核心数据时,我有一个视图,完成后它会向数据库询问随机消息(句子)并将其保存到数据库中的另一行。

如果我对最后一部分进行硬编码,而不从数据库中获取数据,那么它工作得很好,但是一旦我从数据库中获取随机行,它就会变得疯狂。

在我的 AppDelegate.m 中:

- (void)save {
    NSAssert(self.context != nil, @"Not initialized");
    NSError *error = nil;
    BOOL failed = [self.context hasChanges] && ![self.context save:&error];
    NSAssert1(!failed,@"Save failed %@",[error userInfo]);
}

- (NSString*)selectRandomSentence
{
    NSFetchRequest *request = [[NSFetchRequest alloc] init];
    NSEntityDescription *entity = [NSEntityDescription entityForName:@"Sentences" inManagedObjectContext:self.managedObjectContext];
    [request setEntity:entity];

    NSError *error = nil;
    NSUInteger count = [self.context countForFetchRequest:request error:&error];

    NSUInteger offset = count - (arc4random() % count);
    [request setFetchOffset:offset];
    [request setFetchLimit:1];

    NSArray *sentenceArray = [self.context executeFetchRequest:request error:&error];

    [request release];

    return [[sentenceArray objectAtIndex:0] sentence];
}

- (NSManagedObjectContext *)context {

    if (_managedObjectContext != nil)
        return _managedObjectContext;

    NSPersistentStoreCoordinator *coordinator = [self coordinator];
    if (coordinator != nil) {
        _managedObjectContext = [[NSManagedObjectContext alloc] init];
        [_managedObjectContext setPersistentStoreCoordinator:coordinator];
    }

    return _managedObjectContext;
}

在我的 ChatController.m 中:

- (void)didRecieveMessage:(NSString *)message
{
    [self addMessage:message fromMe:NO];
}

#pragma mark -
#pragma mark SendControllerDelegate

- (void)didSendMessage:(NSString*)text {
    [self addMessage:text fromMe:YES];
}

#pragma mark -
#pragma mark Private methods

- (void)responseReceived:(NSString*)response {
    [self addMessage:response fromMe:NO];
}

- (void)addMessage:(NSString*)text fromMe:(BOOL)fromMe {
    NSAssert(self.repository != nil, @"Not initialized");
    Message *msg = [self.repository messageForBuddy:self.buddy];
    msg.text = text;
    msg.fromMe = fromMe;

    if (fromMe)
    {
        [self.bot talkWithBot:text];
    }

    [self.repository asyncSave];

    [self.tableView reloadData];
    [self.tableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:[self.buddy.messages count] - 1] atScrollPosition:UITableViewScrollPositionBottom animated:YES];
}

在我的 OfflineBot.m 中:

- (void)talkWithBot:(NSString *)textFromMe
{
    AppDelegate *delegate = [[UIApplication sharedApplication] delegate];
    [self didRecieveMessage:[delegate selectRandomSentence]];
}

- (void)didRecieveMessage:(NSString *)message
{
    if ([self.delegate respondsToSelector:@selector(didRecieveMessage:)])
        [self.delegate didRecieveMessage:message];
}

存储库.m

- (Message*)messageForBuddy:(Buddy*)buddy {
    Message *msg = [self.delegate entityForName:@"Message"];
    msg.source = buddy;
    [self.delegate.managedObjectContext refreshObject:buddy mergeChanges:YES];
    return msg;
}

- (void)asyncSave {
    [self.delegate save];
}

错误:

2012-08-10 00:28:20.526 聊天[13170:c07]* 断言失败 -[AppDelegate保存],/Users/paulp/Desktop/TestTask/Classes/AppDelegate.m:28 2012-08-10 00:28:20.527 聊天[13170:c07] *由于未捕获而终止应用程序 异常'NSInternalInconsistencyException',原因:'保存失败 {类型=不可变字典,计数= 2, 条目=> 1:{内容= “NSAffectedObjectsErrorKey”} = ( “(实体:句子;id:0x6b8bf10; 数据:)" ) 2 : {内容 = "NSUnderlyingException"} = CoreData 无法满足以下错误 '0x6b8bf10 '}

我究竟做错了什么?

Update


唔。您是否正确实施了以下并发操作本指南 https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/CoreData/Concurrency.html? 您看到的问题是跨多个线程使用核心数据时的常见问题。对象在您的“后台上下文”中被删除,然后它被另一个上下文访问。呼唤[context processPendingChanges]在删除之后但保存之前的背景上下文中可能会有所帮助。

还有一个关于优化核心数据性能的 WWDC 2010 会议 (137),其中涉及到一些删除。

当您执行 fetch 时,Core Data 返回与您提供的谓词匹配的对象集合。这些对象实际上尚未设置其属性值。当您访问某个属性时,核心数据会返回到存储以“触发故障” - 使用存储中的数据填充该属性。当 Core Data 前往存储区获取对象的属性值,但持久存储区中不存在该对象时,会发生“无法完成故障...”异常。被管理对象上下文thought它应该存在,这就是为什么它可以尝试故障 - 这就是问题所在。导致抛出异常的上下文不知道该对象已被其他对象(例如另一个上下文)从存储中删除。

请注意,上述并发指南现已过时,您应该使用父子上下文和私有队列并发,而不是旧的线程限制模型。由于多种原因,亲子环境不太可能遇到“无法完成错误......”的情况。请提交文档错误或使用反馈表来请求更新并发指南。

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

CoreData 无法完成以下错误: 的相关文章

  • NSUserDefaults 多久同步一次?

    的文档NSUserDefaults说synchronise方法被定期调用 但没有提及频率 10分钟的谷歌搜索没有发现任何信息 发生的频率是多少synchronise方法调用 这是一个未公开的实现细节 可能甚至不是一个恒定的时间间隔 但是 您
  • Socket.io 400(错误请求)

    我的服务器上有这段代码 var express require express var routes require routes var user require routes user var http require http var
  • 在 Xcode5 中使用 XCTest 时 AFNetworking 导致错误

    我正在使用 Xcode 5 现在刚刚开始对现有项目进行单元测试 为此我添加了CocoaTouch Unit Testing Bundle作为我的项目的目标 目标名称是 MyAppTests 我之前使用添加了 AFNetworking 库Co
  • HTML 分页

    有没有html分页的开源项目 我正在为 iPhone 开发一个应用程序 我想在 UIWebView 上显示 HTML 文件 并且不希望用户向下滚动以查看屏幕上未显示的剩余内容 我想在第二个 UIWebView 上显示剩余的内容 我怎样才能做
  • 在 iOS 中使用 FB SDK 是否需要 Facebook 的成功审核?

    现在我需要使用Facebook SDK来自我的 iOS 应用程序中的 Facebook 所以我填写了有关我的应用程序的信息developer facebook com应用程序详细信息 但是 当我用我的设备测试我的应用程序时 我可以发布到 F
  • iOS:滚动视图仅在键盘出现后才起作用

    我制作了滚动视图 其中有很多文本字段 我添加了更新的 TPKeyBoardAvoidingScrollView 并将其添加到滚动视图的文件所有者中 我在 h 文件中添加了插座 在 m 文件中综合并添加了行 self view addSubv
  • 如何右对齐 UILabel?

    Remark 实施 myLabel textAlignment right does not解决了我的问题 这不是我所要求的 我想要实现的是让标签对齐右对齐 为了更清楚地说明 这就是如何left对齐外观 就是这样justify对齐外观 if
  • 通过 renderInContext 定位要绘制的视图:

    我想画一个UIView在我目前的CGGraphicsContext 我画的是UIView via renderInContext 但它的位置不正确 始终位于左上角 我拥有所有的价值观UIView可用于绘制UIView CGRect fram
  • 核心数据对多关系。它们是延迟加载吗?

    我在核心数据 适用于 iPhone 中有典型的模型 其中包含部门和员工 部门 gt gt 员工 我不想每次加载时都加载一个部门的所有员工 所以我想将员工创建为获取的属性 我想我可以定义一些像这样的谓词 employee deparmentI
  • 查找已用应用程序名称的捆绑包/开发人员

    我正在尝试将应用程序上传到应用程序商店并收到以下错误 很容易理解 The App Name you have entered has already been used 该应用程序不在 iTunes 上 有什么方法可以找出谁拥有该应用程序或
  • 以弯曲格式显示文本

    我正在寻找以曲线格式绘制一些文本 我使用哪个控件并不重要 UITextField UILabel or UITextView 我只想显示如图所示的文本 仍在寻找解决方案 请帮忙 查看此链接 https nodeload github com
  • 如何在 iOS 应用程序中通过其他应用程序共享内容/数据,就像我们在 Android 应用程序中使用 Intent.ACTION_SEND 所做的那样?

    在Android中 我们可以通过Intent ACTION SEND startactivity api轻松共享内容 文本 图像 视频等 我已经有一个应用程序可以完美地做到这一点 并且有一个并行的 iOS 应用程序 我希望它能够实现相同的功
  • Cordova 在 iOS 中显示警告“线程警告:[您的函数]花了 [n] 毫秒”

    THREAD WARNING Console took 81 661865 ms Plugin should use a background thread 在跑步的时候iOS 手机差距项目 对于一些剩余的插件 例如地理位置和文件系统 也是
  • 如何用图片替换UITableView?

    我有一个 UITableView 默认为空白 直到用户编辑并向其添加数据 我想显示一张带有说明的图像 直到用户编辑它为止 图片的大小非常适合导航栏和标签栏之间 有没有办法以编程方式执行此操作 您可以使用removeFromSuperview
  • ARC 不允许将 Objective-C 指针隐式转换为“void *”

    这意味着什么 我有什么选择 ARC 不允许将 Objective C 指针隐式转换为 void 我正在将 Xcode3 项目移植到 iOS5 它使用 AudioSessionInitialize 如下 AudioSessionInitial
  • 沙盒尝试恢复消耗性 IAP

    我一直在尝试在 iOS 上测试一些消耗性 IAP 但遇到了一个奇怪的错误 弹出一条警报 其中包含以下文本 此应用内购买已被购买 它将恢复为 自由的 环境 沙盒 我已经检查过 并且确定我的 IAP 可以在 iTunesConnect 中使用
  • ios 在后台处理推送通知

    我想保存应用程序处于后台状态时到达的推送通知 我知道关于 void application UIApplication application didReceiveRemoteNotification NSDictionary userIn
  • ios - 在哪里放置 s.static_framework = true

    我在 CocoaPods 中的级别为 0 当我使用pod install有一个错误说 The Pods App target has transitive dependencies that include static framework
  • 如何将相机中的图像保存到 iPhone 图库中的特定文件夹?

    嘿 我是 iPhone 新手 最近我一直在尝试制作一个应用程序 基本上 我想要做的是 如果用户将从相机捕获任何图像 那么它应该保存在设备库中 我知道如何将照片保存在图库中 它对我有用 但我无法将所有捕获的图像保存到设备图库中的特定文件夹 例
  • 在 HTML5 iOS 7 / iOS 8 中显示十进制键盘

    经过几个小时的搜索后 我只是有一个简单的问题 是否有可能在网络浏览器输入字段中显示小数键盘 input type number 只显示数字 但我需要在左下角使用逗号或点 我尝试过任何事情 pattern step等等 但没有显示十进制键盘

随机推荐

  • 如何将列表中的所有元素划分在一起

    例如 a 1 2 3 4 5 6 我想要做 1 2 3 4 5 6 我尝试过使用operator div函数 但似乎没有给出正确的结果 顺便说一句 我对 python 还很陌生 您可以使用reduce https docs python o
  • 动态“case_when”允许不同数量的条件和条件本身

    我正在寻找一种动态方法来指定一些 条件参数 然后将其提供给case when操作或其他更适合该问题的操作 我的目标是将条件规范与 case when 调用分开 例如这样用户只需在文本文件或 R 中的列表中输入条件 然后我将获取该信息并将其提
  • 防止图像缓存在浏览器中

    我有一个 浏览图片 功能 其中有缩略图 当用户单击它时它会展开 现在 这两个图像都存储在不同大小的单独虚拟目录中 较大的是 200 200 px 当我点击放大时 它仍然只显示较小的图像 而不是 200 200 的图像 您可以将随机 URL
  • Django - 通过模型名称获取 ContentType 模型(通用关系)

    我现在正在思考这个问题一段时间 我正在创建一个聊天应用程序 在 chat models 中指定了 Room 类 但是 Room 可以与我的项目中的任何内容相关 因为它在外键中使用通用关系 有没有办法只知道模型名称就知道 Room 与哪个模型
  • 如何在 MySQL GROUP BY 子句中排序或选择行?

    我有一个这样的表 id number otherfields 664 48 aaa 665 49 bbb 666 55 ccc 667 48 ddd 我的查询分组为number字段 我希望它选择第一个 最低 id 这样数据就出来了ccc a
  • Angularjs - 自定义 $resource

    我用角 resource用于 REST 服务 由于我的 get 响应中的怪癖 我无法将 resource 服务用于 CRUD 应用程序 创建一个新对象work Card的day 类似于 var newCard new CreditCard
  • Newtonsoft 中的 JSON null 处理问题

    我有一个问题null交易时处理Newtonsoft json 我想检查结果是null或不 基于此我想处理一些情况 我的代码如下 try var response GetApiData Post getApiBaseUrl data ToSt
  • Alt+Enter 停止在 IntelliJ 中处理 Dart 文件

    构建 Flutter 应用程序时ALT Enter键盘快捷键非常方便 不仅可以调出快速修复 还可以调出弹出菜单来包装 删除小部件 在我跑步之前它工作得很好flutter upgrade并更新了 IntelliJ 中的 Dart 和 Flut
  • 如何测试Oracle目录的读/写文件系统权限?

    假设您创建一个目录 例如 CREATE OR REPLACE DIRECTORY EXT DATA FILES AS data ext data files GRANT READ WRITE ON DIRECTORY SYS EXT DAT
  • Delphi中GetLastError和FormatMessage的正确用法是什么?

    我在 Delphi 2006 也是 Delphi 7 中使用第三方组件时遇到问题 在执行对该组件的函数调用时出现 未指定错误 您是否有在 Delphi 中使用 GetLastError 和 FormatMessage 的示例代码 这将允许我
  • ASP.Net MVC 4 的 WebAPI 未正确绑定复选框?

    我正在将 WebAPI 合并到我的开发中 并将所有表单提交发布到 WebAPI 控制器 我注意到复选框没有正确绑定到模型 我有一个表格使用 Html CheckBoxFor m gt m HasVideo 它生成一个复选框和一个隐藏的表单元
  • 反应式表单,检查用户名是否存在

    我在 Ionic Firebase 中遇到问题 验证器的值采用反应形式 特别是我有下面的这 2 个函数 用于检查 firebase 实时数据库中的用户名是否存在 这两个函数返回 Promise 布尔值 export class Userna
  • 以编程方式更改 IE 设置

    我正在尝试制作一个 Windows 应用程序 将 URL 添加到 IE 的 受信任站点 中 这部分有效 解决方案 http www nakov com blog 2009 05 15 c code for changing internet
  • PySimpleGUI 滑块有小数范围吗?

    我需要某种方法来在 PySimpleGUI 中的滑块上方显示十进制值 我已经尝试过输入十进制值 但是当我这样做时它会抛出错误 import PySimpleGUI as sg layout sg Slider range 850 999 d
  • 将 AjaxOnlyAttribute 和 ChildActionOnlyAttribute 组合到一个操作过滤器中

    我希望能够在控制器上标记一个动作 以便通过 ajax 调用和 RenderAction 来调用 问题在于这两个属性派生或实现不同的抽象 一种出路是下一个 AjaxOnly PartialViewResult GetViewAjax int
  • 当不使用字符串操作时,GCC 11 给出 -Wstringop-overflow

    这是我的代码 test c include
  • Swift 中的纯类协议

    我希望我的一些课程 不是全部 符合使用 仅限类的协议 https developer apple com library ios documentation Swift Conceptual Swift Programming Langua
  • 使用 MS Access 中的 GUID pk 插入 SQL Server 表

    我正在将数据库从 Access 后端迁移到 SQL Server 后端 同时保留 Access 前端 其中一张表设置了其 PK 的复制 ID 作为 Access DB 我们可以将值插入到该表中 而无需引用 PK 字段 因为 Access 会
  • 使用 jquery 选择最近的锚元素

    我有一张带有一个链接的表 如下所示 td a href class topiclink item Topic a td 我想选择 item topic的数据 我尝试使用 topiclink click function e var val
  • CoreData 无法完成以下错误:

    我有一个非常烦人的问题 我似乎无法解决 当我发送一条消息并保存到核心数据时 我有一个视图 完成后它会向数据库询问随机消息 句子 并将其保存到数据库中的另一行 如果我对最后一部分进行硬编码 而不从数据库中获取数据 那么它工作得很好 但是一旦我