2011-12-30 31 views
1

新年快乐。核心数据和后台线程问题

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; 
} 
+0

不是真的关系到你的问题,但它确实帮助,如果你的答案分解成更小的块(垂直空白是你的朋友),可能包括代码段(高亮和颜色也很酷)等。当我点击你的问题时,我的第一个想法是“我没有阅读所有内容” – 2011-12-30 14:19:29

+0

嗨保罗,编辑删除了我的空间,我不知道我是否需要做点什么,因为我使用的是铬合金 – Bjarke 2011-12-30 14:45:17

+1

或者也许我只是因为我从我的问题中得到的所有头痛,写了我的文章才写得很快:P – Bjarke 2011-12-30 14:47:35

回答

1

根据http://developer.apple.com/library/ios/#documentation/cocoa/Reference/CoreDataFramework/Miscellaneous/CoreData_Constants/Reference/reference.html您的错误代码都代表NSManagedObjectMergeError

因为你总是获取同样的数据,我假设它应该是相同的,你是否从后台线程或主线程得到它,所以你应该能够改变你的合并政策从它的默认NSErrorMergePolicyNSOverwriteMergePolicy这将覆盖任何冲突的对象与新的数据(再次,假设他们是相同的,这不会是一个问题)。

你可以找到更多关于合并的政策在这里:http://developer.apple.com/library/ios/#documentation/CoreData/Reference/NSMergePolicy_Class/Reference/Reference.html#/

+0

嗨,数据总是相同的,所以我会尝试这种方法的第一件事,并报告回来,如果它解决了我的问题。 – Bjarke 2011-12-30 14:48:41

+0

显然这似乎是伎俩,我没有得到错误或任何奇怪的崩溃。我会将新的代码片段添加到帖子中。 – Bjarke 2011-12-30 15:03:59

+0

PS你救了我的周末:) – Bjarke 2011-12-30 15:04:12