gpt4 book ai didi

cocoa - 在查找或创建循环期间将数据附加到 NSFetchedResultsController

转载 作者:行者123 更新时间:2023-12-03 18:05:39 27 4
gpt4 key购买 nike

我有一个由 NSFetchedResultsController 管理的 TableView 。但是,我在查找或创建操作时遇到问题。当用户点击表格 View 的底部时,我正在向服务器查询另一批内容。如果本地缓存中不存在,我们将创建它并存储它。但是,如果它确实存在,我想将该数据附加到获取的结果 Controller 并显示它。我不太明白那部分。

这是我到目前为止正在做的事情:

  1. 初始化查询数据库中最新 100 个结果时的 NSFetchedRequestController(使用 setFetchLimit:)。即使有 1000 行,我一开始也只想访问 100 行。
  2. 将返回的值数组从我的服务器传递到 NSOperation 进行处理。
  3. 在操作中,创建一个新的托管对象上下文来使用。
  4. 在操作中,我遍历数组并执行获取请求以查看对象是否存在(基于其服务器 ID)。
  5. 如果该对象不存在,我们将创建它并将其插入到操作的托管对象上下文中。
  6. 迭代完成后,我们保存托管对象上下文,这会在我的主线程上触发合并通知。

在合并期间,步骤 4 中新创建的对象将插入到表中,但任何已存在且刚刚获取的对象则不会插入到表中。这是我的 NSOperation 中的相关代码

for (NSDictionary *resultsDict in self.results)
{
NSNumber *dbID = [NSNumber numberWithLong:[[resultsDict valueForKey:@"id"] longValue]];

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
[fetchRequest setEntity:[NSEntityDescription entityForName:kResultEntityName inManagedObjectContext:moc]];
[fetchRequest setPredicate:[NSPredicate predicateWithFormat: @"(dbID == %@)", dbID]];

NSError *error = nil;

NSManagedObject *newObject = nil;
// Query the data store to see if the object exists
newObject = [[moc executeFetchRequest:fetchRequest error:&error] lastObject];
[fetchRequest release];

// If it doesn't exist, create it.
if ((tweet == nil))
{
// Create the NSManagedObject and insert it into the MOC.
}
}

我想要传递给主线程的是新创建的对象以及每次循环迭代时可能在获取请求中获取的任何现有对象。

我觉得这是我所缺少的一些简单的东西,并且可以在正确的方向上插入。

最佳答案

At this point, any objects that weren't locally cached in my Core Data store before will appear, but the ones that previously existed do not come along for the ride.

你能解释一下吗?我不确定你所说的那些以前存在的是什么意思。是与表上的过滤器不匹配的对象在检索后执行,还是您说以前的对象从表中消失了?

此外,您如何实现 NSFetchedResultsController 的委托(delegate)方法?您正在执行简单的表重新加载还是插入/移动行?

更新

有几种方法可以做到这一点,但它们需要您进行一些实验。我首先会考虑“触摸”所获取的对象的想法。也许更新“lastAccessed”日期或其他内容,以便这些对象在合并时会显示为“已更新”。我怀疑这是最简单的路径。

除此之外,另一种选择是将这些对象的通知广播回主线程​​(使用它们的 NSManagedObjectID 作为跨线程边界的载体),以便您可以手动更新它们;但这并不理想。

关于cocoa - 在查找或创建循环期间将数据附加到 NSFetchedResultsController,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2590190/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com