Iphone 具有并行操作的核心数据
我是核心数据世界的新手,我使用iOS 4作为基本框架,并使用核心数据对我的本地SQLight DB执行操作,我正在设计脱机应用程序,但当用户联机时,我需要从服务器中提取一些更新的数据,并将其推送到本地DB中,另外,在同一时间,用户可能会执行一些插入操作,并通过UI更新到同一个DB中 因此,在同一个数据库上同时会发生两组操作 1) 用户将通过UI视图进行一些插入或更新 2) 后台运行的同步引擎可能正在提取一些数据并将其推入本地数据库 在这种情况下,[使用[context save:&error];]保存共享托管上下文可能会出现问题,因为上下文可能最终保存错误的数据 对于同一个问题,我可以考虑两种解决方案 1) 创建另一个指向同一个DB的持久存储,但这样做可能会导致设备上的高内存消耗 2) 为同步引擎创建不同的线程,但不确定如何处理 你们能不能给这件事遮光,还是我的想法完全错了 谢谢Iphone 具有并行操作的核心数据,iphone,core-data,Iphone,Core Data,我是核心数据世界的新手,我使用iOS 4作为基本框架,并使用核心数据对我的本地SQLight DB执行操作,我正在设计脱机应用程序,但当用户联机时,我需要从服务器中提取一些更新的数据,并将其推送到本地DB中,另外,在同一时间,用户可能会执行一些插入操作,并通过UI更新到同一个DB中 因此,在同一个数据库上同时会发生两组操作 1) 用户将通过UI视图进行一些插入或更新 2) 后台运行的同步引擎可能正在提取一些数据并将其推入本地数据库 在这种情况下,[使用[context save:&error];
Ajay Sawant就个人而言,我会使用线程。(实际上,我会使用NSO操作,但这只是一个花哨的线程) 永远不要在线程之间共享托管上下文 如果希望事务是独立的(即后台更新等),请为每个事务使用不同的托管对象上下文 您应该只使用一个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获取新的托管对象
就我个人而言,我会使用线程。(实际上,我会使用NSO操作,但这只是一个花哨的线程) 永远不要在线程之间共享托管上下文 如果希望事务是独立的(即后台更新等),请为每个事务使用不同的托管对象上下文 您应该只使用一个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获取新的托管对象