我有我认为是一个相当标准的设置,一个暂时保存从未保存(包含从网上下载的一堆对象)和另一个持久对象的永久MOC暂停MOC。 当用户从scratchMOC中select一个对象添加到她的库中时,我想要1)从scratchMOC中移除该对象并插入到permanentMOC中,或者2)将该对象复制到permanentMOC中。 核心数据常见问题说我可以像这样复制一个对象: NSManagedObjectID *objectID = [managedObject objectID]; NSManagedObject *copy = [context2 objectWithID:objectID]; (在这种情况下,context2将是permanentMOC。)但是,当我这样做时,复制的对象是故障的; 数据最初是未解决的。 当它得到解决后,所有的值都是零; 来自原始managedObject的数据(属性或关系)都没有被实际复制或引用。 因此,我看不出使用这个objectWithID:方法之间的任何区别,只是插入一个全新的对象到永久MOC使用insertNewObjectForEntityForName :. 我意识到我可以在permanentMOC中创build一个新对象,并手动复制旧对象中的每个键值对,但是我对这个解决scheme并不满意。 (我有一些不同的pipe理对象,我有这个问题,所以我不想写和更新副本:所有的方法,因为我继续开发。)有没有更好的办法?
我有一个NSManagedObjectContext,其中有一些NSManagedObjects的子类,有些是其他人的容器。 我想要做的就是观察一个顶级对象,通知它的任何属性,关联,或者它所包含的任何对象的属性/关联。 使用上下文的“hasChanges”没有给我足够的粒度。 对象的“isUpdated”方法只适用于给定的对象(而不是其关联中的任何东西)。 是否有一个方便的(也许,基于KVO的)我是否可以观察局限于一个子图的上下文的变化?
在iOS 5中, NSManagedObjectContext有一些新的方法, performBlock:和performBlockAndWait: 这些方法实际使用的是什么? 他们在旧版本中取代什么? 应该传递什么样的信息给他们? 我如何决定使用哪个? 如果有人使用它的一些例子,那就太好了。
问题 :如何获取我的子上下文以查看父上下文中保留的更改,以便触发我的NSFetchedResultsController更新UI? 这是设置: 你已经有一个应用程序下载并添加大量的XML数据(大约200万条logging,每个logging的大小约为普通段落的文本大小).sqlite文件的大小约为500 MB。 将这些内容添加到Core Data中需要时间,但是您希望用户能够在数据逐渐加载到数据存储中的同时使用该应用程序。 对于用户来说,它是不可见的,不可见的,因为大量的数据正在被移动,所以没有挂起,没有抖动:滚动像黄油。 不过,应用程序更有用,数据添加的越多,所以我们不能永远等待将数据添加到Core Data存储区。 在代码中,这意味着我真的想在导入代码中避免这样的代码: [[NSRunLoop currentRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:0.25]]; 该应用程序只有iOS 5,所以它需要支持的最慢的设备是iPhone 3GS。 以下是我迄今用来开发当前解决scheme的资源: 苹果的核心数据编程指南:有效地导入数据 使用自动释放池来减less内存 关系成本。 导入单位,然后在最后修补关系 不要询问是否可以帮助它,它会以O(n ^ 2)的方式减慢速度 批量导入:保存,重置,排出和重复 closures导入时的撤消pipe理器 iDeveloper电视 – 核心数据性能 使用3个上下文:Master,Main和Confinement上下文types iDeveloper TV – Mac,iPhone和iPad更新的核心数据 使用performBlock在其他队列上运行保存会使事情变得更快。 encryption会减慢速度,如果可以的话关掉它。 导入和显示核心数据中的大型数据集Marcus Zarra 您可以通过给当前运行循环留出时间来减慢导入速度,这样用户就能感觉到stream畅。 示例代码certificate,可以执行大量的导入操作并保持UI的响应速度,但速度不及3个上下文和asynchronous存储到磁盘的速度。 我当前的解决scheme 我有3个NSManagedObjectContext实例: masterManagedObjectContext – 这是具有NSPersistentStoreCoordinator并负责保存到磁盘的上下文。 我这样做,所以我的保存可以是asynchronous的,因此非常快。 我这样创build它: masterManagedObjectContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSPrivateQueueConcurrencyType]; [masterManagedObjectContext […]
我需要处理大量的核心数据。 假设我的核心数据模型如下所示: Car —- identifier type 我从我的服务器获取汽车信息JSON列表,然后我想与我的核心数据Car对象同步,这意味着: 如果它的新车 – >从新的信息创build一个新的核心数据Car对象。 如果汽车已经存在 – >更新Core Data Car对象。 所以我想在后台做这个导入,而不会阻塞用户界面,而使用滚动汽车表格视图,呈现所有的汽车。 目前我正在做这样的事情: // create background context NSManagedObjectContext *bgContext = [[NSManagedObjectContext alloc]initWithConcurrencyType:NSPrivateQueueConcurrencyType]; [bgContext setParentContext:self.mainContext]; [bgContext performBlock:^{ NSArray *newCarsInfo = [self fetchNewCarInfoFromServer]; // import the new data to Core Data… // I'm trying to do an efficient import here, // with few […]