- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我是 Core data 的新手,仍在弄清楚具体细节,这个错误困扰了我几个小时,我似乎找不到解决方案。非常感谢任何帮助。
问题是这样的
我有两个 View ,它们从服务器获取数据并更新 UI。我是这样设置流程的
view1 -> 从服务器发送 HTTP 请求 - 接收回调 -> 将数据保存到 Coredata -> 从 Core Data 读取并显示在 UI 上(回调和保存/读取 Coredata 发生在 ViewController 中)
view2 -> 从服务器发送 HTTP 请求 - 接收回调 -> 将数据保存到 Coredata -> 从 Core Data 读取并显示在 UI 上(回调和保存/读取 Coredata 发生在 ViewController 中)
View 2 每 3 秒重复此过程,因为这是一个自动刷新屏幕。
问题是每当我尝试在 View 1 和 View 2 之间快速切换时,应用程序就会崩溃并出现上述错误。如果我在每个 View 上等待几秒钟(等待从服务器获取数据),它工作正常。我做错了什么,我需要修改什么?
- (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 也具有相同的回调并遵循相同的流程。
编辑 1之前忘了提这个,我总是在 saveToCoreData 方法中得到错误。此外,还需要注意的一件事是,如果我删除删除对象的代码,它一切正常(我需要在保存更新数据之前从表中删除所有现有数据)。虽然不确定发生了什么。
最佳答案
删除删除代码使其工作的原因是因为您正在删除持久存储中的数据而不更新另一个 View ,该 View 仍然具有与仍在内存中的数据相关联的托管对象实例。请记住,虽然 Core Data 处理对象,但每个对象都必须在其后面的数据库中有一行。当您删除该行时,Core Data 会生气。
因此,要解决此问题并仍然删除您的数据,您应该让您的 View 监听 NSManagedObjectContextWillSaveNotification
和/或 NSManagedObjectContextDidSaveNotification
通知并使用最您商店中最新版本的数据。正是在这一点上,您应该丢弃您的 View 持有的任何核心数据对象,并从商店重新加载它们。
关于iphone - 核心数据 - "NSObjectInaccessibleException - CoreData could not fulfill a fault",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5591301/
这是我的错误... Thread 1: EXC_BAD_ACCESS (code=1, address=0x18) 这是我的产品请求代表... class ProductRequestDelegate
谁能解释一下这些函数是什么意思? setDate = agent.parameters.date.split('T')[0]; setTime = agent.parameters.time.spli
我正在使用 Dialogflow 开发一个聊天机器人,想验证某人的年龄。简要介绍一下背景:我正在创建一个聊天机器人来识别护理需求,例如住宅或痴呆症护理。在最初的查询中,我希望能够通过在 Dialogf
我正在使用名为 IonSound.js 的声音播放器,可以在此处找到它。 http://ionden.com/a/plugins/ion.sound/en.html 根据文档,我可以像这样监听 sou
我想在我的履行代码中获取参数的原始输入。 我尝试过: var time = agent.parameters.time.original 但结果未定义。 我已经尝试过: var query = age
我设置了一个返回 Promise 的函数.我想在 PromiseKit 的 when(fulfilled:) 中使用这个函数功能,但每当我尝试这样做时,我都会收到错误消息。这是返回 Promise 的
我正在使用 dialogflow 和 google assistant 创建一个语音机器人。我的客户提供了他的网络访问权限,这不是私有(private) URL,而是 IP。它也没有通过 SSL 认证
我是 dialogflow 实现的新手,我正在尝试根据用户问题从新闻 API 中检索新闻。我遵循了新闻 API 提供的文档,但我无法从搜索结果中捕捉到任何响应,当我在控制台中运行该函数时,它不是错误。
我们偶尔会收到“CoreData 无法完成故障”的信息。我们已阅读 Apple 文档,但不清楚允许保留哪些内容。我们非常小心地为每个线程创建一个上下文等。但是,我们的应用程序正在做的一件事是我们在 U
我一直在尝试 DialogFlow 和 Fulfillment,但直到现在我总是将 FulfillmentText 从我的 webhook 返回到我的机器人,如下所示: response = {
async function pending() { return new Promise((resolve, reject) => { resolve(1) }); } async functi
我有一个联系人应用程序,我创建了一个行动项目,最终根据用户对话决定要调用的电话号码。要调用的号码正在 后端(使用 Webhook 实现) 决定。 我想开始调用后端确定的号码(就像你在 Google 智
我在很多测试中都使用了 XCTestExpectation,有时(非常随机地)一些期望没有实现(尽管我确信它们应该是)。 在调查这个问题时,我注意到一些期望在主线程中实现,而一些在后台线程中实现。到目
这是我正在使用的导致问题的代码行: [self.managedObjectContext deleteObject:object]; 然后当它保存上下文时,它会导致崩溃: Terminating ap
(相关但不完全相同:JS Promises: Fulfill vs Resolve) 我一直在努力思考 Javascript promises,我正在努力解决 resolve 和 resolved 与
use std::any::Any; pub enum ObjectType { Error, Function, } pub trait Object { fn obj_ty
美好的一天。需要一些新鲜的眼光。不确定为什么我的 Promise 在浏览器控制台中返回“pending”: // contact.js (react) /* trim */ submitForm =
我可以运行这段代码 fn testf(host: &str) {} fn start(host: &str) { testf(host); testf(host); } 但出于某种原因
我试图在 Rust 的线程中使用方法,但我收到以下错误消息 :21:10: 21:23 error: the type [closure@:21:24: 23:14 tx:std::sync::mps
对于应用程序的最近更新,我看到许多崩溃日志都包含核心数据无法完成故障的错误。但是在应用程序(启动或其他地方)中的任何地方,我都没有删除无法实现故障的对象,也不会级联删除它们。这个错误还能怎么发生?有没
我是一名优秀的程序员,十分优秀!