新年快乐。核心数据和后台线程问题
Iam与使用核心数据保存数据的应用程序一起工作。该应用程序包含一个日历模块,用户可以通过两个按钮(nextDay,previousDay)在日期之间来回跳转。每天都包含从Web服务获取的som信息,因此我想在用户使用日历时在后台获取大部分数据(接下来的14天)。
因此,这里是我的方法:
第一天的数据由主线程获取并保存到持久存储,并呈现给用户。然后,在后台启动NSThread,并使用新的nsmanagedcontext获取数据,并在获取所有数据时将其保存到持久性存储中。
但是,当这个后台线程正在运行时,用户可以选择跳到第二天或前一天,如果没有数据,主线程将获取数据并将其保存到持久存储中。这提供了两个线程获取相同数据并将其保存到持久性存储的可能性。但据我所知,这种方法不应该是一个问题,因为我使用新的nsmanangedcontext作为后台线程。
但有时出现以下错误该操作无法完成。 (可可错误133020.)然后主线程无法保存到持久性存储。
我已经尝试使用只有一个nsmanagedcontext线程之间共享,但这有时会导致其中一个线程停下来,永远不会继续前进。
我花了很多时间阅读不同的论坛/博客,希望任何人都可以帮助或引导我在正确的方向。
问候
的帮助解决: 我渐渐的错误保存到我的持久存储时,合并过程中的错误所致。我可以通过在保存时更改合并策略来解决此问题。以下片段显示了我的nsmanagedcontext的init方法。大胆显示政策的设置。我可以这样做,因为我提取的数据是相同的,不管它是主线程还是后台线程。
- (NSManagedObjectContext *)managedObjectContext
{
NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator];
if (coordinator != nil)
{
__managedObjectContext = [[NSManagedObjectContext alloc] init];
[__managedObjectContext setPersistentStoreCoordinator:coordinator];
**[__managedObjectContext setMergePolicy:NSOverwriteMergePolicy];**
}
return __managedObjectContext;
}
不是真的关系到你的问题,但它确实帮助,如果你的答案分解成更小的块(垂直空白是你的朋友),可能包括代码段(高亮和颜色也很酷)等。当我点击你的问题时,我的第一个想法是“我没有阅读所有内容” – 2011-12-30 14:19:29
嗨保罗,编辑删除了我的空间,我不知道我是否需要做点什么,因为我使用的是铬合金 – Bjarke 2011-12-30 14:45:17
或者也许我只是因为我从我的问题中得到的所有头痛,写了我的文章才写得很快:P – Bjarke 2011-12-30 14:47:35