2011-02-23 40 views
0

我是新来的核心数据的世界,我使用的是iOS 4的基本框架,并使用核心数据,来执行对我的本地SQLight DB操作,我设计的离线应用,但在某些时候,当用户来在线我需要从服务器提取一些更新的数据并将其推送到本地数据库,同时用户可能会执行一些插入操作并通过UI将其更新到相同的数据库中。与并行运算核心数据

所以会有两套经营在同一时间对同一DB发生的

1)用户将通过UI做一些插入或更新视图

2)同步引擎在后台运行可能是拉一些数据,将其推到本地数据库

在这种情况下可能存在的问题与共享管理方面被保存[与[上下文保存:&错误]],因为有这方面可能最终有可能保存错误的数据。

我能想到的有两个解决方案,为同一

1)创建另一个持久性存储指向同一个数据库,但这样做可能会导致较高的内存消耗的设备

2)创建不同的线程的同步引擎,但不知道如何处理它。

你们可以请树荫这方面的一些光,还是我完全错误的方向在想什么?

感谢 阿贾伊张以芳

回答

3

就个人而言,我会使用线程。 (其实,我会使用NSOperation,但这只是一个奇特的线程)。

禁止共用线程之间的管理范围内。

如果你希望你的交易是独立的(即后台更新等),使用的每一个不同的管理对象上下文。

您应该只使用一个persistentStoreCoordinator但创建它managedObjectContext为您的应用程序的每个线程。

这也意味着你无法通过管理线程之间的对象,但它是完全通过的ObjectID也就是说,如果你想告诉主线程的东西已经做到:

// On your background thread . . . 

[managedObjectContext save:nil]; 

NSDictionary *userInfo = [NSDictionary dictionaryWithObjectsAndKeys:[myThing objectID], @"id", nil]; 
[NSNotificationCenter defaultCenter] postNotificationName:@"something-happened" object:self userIfno:userInfo]; 

在主线程你应该使用objectWithID方法为主线程的managedObjectContext获取新的托管对象。

See this document for more details

+0

绝不共享线程之间的托管上下文。 +1 – gbk 2014-12-05 06:55:27