草庐IT

NSManagedObjectContext

全部标签

objective-c - NSManagedObjectContext的performBlock方法是否保证操作顺序?

这个问题几乎涵盖了所有内容。如果我将N个block放入NSManagedObjectContext的队列中,它是否会按顺序、保证地执行它们,或者是否有可能其中一些可能被打乱? 最佳答案 我看不出NSManagedObjectContext没有理由不在内部使用GCD,而且GCD队列严格来说是FIFO。当然我没有证据证实这一点,但这对我来说非常有意义,因为performBlock的目标是线程安全,并且在给定的上下文中一次只执行一个操作,苹果为什么要打扰在功能完善的系统(GCD)已经存在的情况下从头开始编写系统。

objective-c - 使用底层 SQLite 数据库时 [NSManagedObjectContext save] 是原子提交吗?

或者可能是CoreData将保存操作拆分为几个连续的原子步骤?对于我的工作,我必须确保在崩溃后重新访问数据库时,要么所有内容都已保存,要么回滚到保存操作之前的状态。我一定不会遇到这样的情况,即一些修改后的NSObject被保存,而另一些则没有。注意:我正在使用以下SQLitepragma选项(我是否需要其他任何选项来确保原子性?):[pragmaOptionssetObject:@"FULL"forKey:@"synchronous"];[pragmaOptionssetObject:@"1"forKey:@"fullfsync"];[pragmaOptionssetObject:@"

ios - NSManagedObjectContext 的 performBlock 中的 dispatch_async

根据WWDC2012视频“核心数据最佳实践”,dispatch_sync应该用于在上下文的performBlock中运行某种回调,创建为一种NSPrivateQueueConcurrencyType。这是为什么?我可以使用dispatch_async(dispatch_get_main_queue(),0)...在私有(private)队列上下文的performBlock中调用一些与UI相关的回调吗? 最佳答案 没有。NSPrivateQueueConcurrencyType管理它自己的内部队列,并且不喜欢你试图离开它的线程之一去做

ios - *** 尝试截断时 +[NSManagedObjectContext MR_defaultContext] 断言失败

我在MagicalRecord版本2.0.7中遇到异常每当我启动该应用程序时,它都会因以下异常而崩溃:***Assertionfailurein+[NSManagedObjectContextMR_defaultContext]我正在这样配置核心数据:在appdelegatedidFinishLaunchingWithOptions方法中:[MagicalRecordsetupCoreDataStack];在appdelegateapplicationWillTerminate中:[MagicalRecordcleanUp];我注意到仅当我尝试截断实体中的所有记录时才会发生崩溃:NSM

ios - 核心数据 - NSManagedObjectContext 与 NSFetchedResultsController

根据NSFetchedResultsController的苹果文档:YouuseafetchedresultscontrollertoefficientlymanagetheresultsreturnedfromaCoreDatafetchrequesttoprovidedataforaUITableViewobject.根据NSManagedObjectContext的文档:Itsprimaryresponsibilityistomanageacollectionofmanagedobjects.这两个类的目的似乎是重叠的。两者都“管理获取的托管对象”。也许措辞上的差异确实意味着什么

iphone - NSManagedObjectContext,传递它的最佳方式?访问它?

我有一个关于如何传递NSManagedObjectContext的问题。在我的应用程序中,似乎是我的AppDelegate处理NSManagedObjectContext,所以我不应该在我的其他ViewControllers中创建其他NSManagedObjectContexts。所以问题是...有什么惯例或聪明的方法可以做到这一点?谢谢。 最佳答案 我传递NSManagedObjectContext的方式是在您传递给它的每个ViewController中简单地拥有一个iVar。我通常修改初始化程序以包括赋值,比如这样....MyN

ios - 为什么 NSManagedObjectContext Queue 在主线程上执行?

当我向类型为NSPrivateQueueConcurrencyType的MOC发送一个performBlock消息时,如下所示:[self.privateManagedObjectContextperformBlockAndWait:^{if([[NSThreadcurrentThread]isMainThread]){NSLog(@"executingonthemainthread!!");}…}];我发现,默认情况下,它在主线程上执行。上面代码中的条件触发,问题导航器指示执行发生在NSManagedObjectQueue中的Thread1上。这让我很费解,因为Apple告诉我们“每

ios - 谁能给我一些关于 NSManagedObjectContext 中这个方法 "refreshAllObjects"的引用

[managedObjectContextrefreshAllObjects]实际上,我在保存上下文期间遇到随机错误,当我在错误后调用[managedObjectContextrefreshAllObjects]时,它允许我保存。谁能指导我了解这种方法。 最佳答案 调用refreshAllObjects会在上下文中的所有对象上调用refreshObject:mergeChanges。您可以在此处查看有关refreshObject:mergeChanges的文档:https://developer.apple.com/library/

iphone - 为什么我更愿意为每个新线程或 NSOperation 创建一个 NSManagedObjectContext 而不是在主线程上调用核心数据?

一些开发人员已经告诉我,我可以为每个新线程创建一个新的NSManagedObjectContext实例,以使CoreData线程安全。然后我只需要处理之后的合并。对我来说,这听起来像是很多额外的代码和开销。这个解决方案不好是有原因的吗?来了:我不会为每个新线程或每个NSOperation创建一个新的MOC,而是在主线程上执行MOC更改,就像我们从UIKit中了解到的那样。我会调用-performSelectorOnMainThread:...waitUntilDone:YES并摆脱所有核心数据并发问题。优点:-不必为每个线程/NSOperation创建一个新的MOC。-不必将MOC合并

ios - 无法将 parentContext 添加到 NSManagedObjectContext,上下文已经有一个协调器

我有一个View,我从主NSManagedObjectContext中检索保存的实体(Route*)。我想将其导入tempContext。按照MarcusZarra的示例,我这样做:NSManagedObjectContext*moc=_route.managedObjectContext;NSManagedObjectID*routeId=[_routeobjectID];NSPersistentStoreCoordinator*psc=moc.persistentStoreCoordinator;self.tempContext=[[NSManagedObjectContextal