该堆栈基于该博客文章的性能分析建立了两个独立的 NSManagedObjectContext 实例:这篇博客文章。它会自动合并更改,在后台上下文和主上下文之间自动同步更改。支持自动数据库迁移。
IRCoreDataStack.backgroundManagedObjectContext
中进行,自动调用 contextSave,自动发送 NSManagedObjectContextDidSaveNotification。IRCoreDataStack.managedObjectContext
中。IRCoreDataStack.managedObjectContext
上执行取操作...platform :ios, '8.0'
pod 'IRCoreDataStack', '~> 1.0'
然后,运行以下命令
$ pod install
您有主 IRCoreDataStack 设置堆栈,并且包含一个帮助你操作的分类。
IRCoreDataStack *coreDataStack = [[IRCoreDataStack alloc] initWithType:NSSQLiteStoreType
modelFilename:@"nameOfTheModelFile"
inBundle:[NSBundle mainBundle]];
您可以使用包含的分类方法来在正确的上下文中创建一个实体。
NSManagedObject *managedObject = [coreDataStack createEntityWithClassName:classNameString
attributesDictionary:attributesDictionary];
您可以使用包含的分类方法,并在完成块中得到结果。这是简单的一个
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"uuid == %@", [obj uuid]];
[self.coreDataStack fetchEntriesForClassName:className
withPredicate:predicate
sortDescriptors:nil
completionBlock:^(NSArray *results) {
// Your completion block
}];
操作后,您应该在后台"MyObject"上下文中使用辅助方法 saveIntoBackgroundContextUsingBlock 保存您的更改
[self.coreDataStack saveIntoBackgroundContextUsingBlock:^(BOOL saved, NSError *error) {
// Your completion block
}];
就像前面的那些一样简单。我们还有其他一些可用的方法...
NSManagedObjectContext *bmoc = self.coreDataStack.backgroundManagedObjectContext;
[self.coreDataStack deleteAllFromEntity:nameEntity inManagedObjectContext:bmoc];
// Despite this method is called save, actually, from the previous operations, is going to delete the objects
[self.coreDataStack saveIntoContext:bmoc usingBlock:^(BOOL saved, NSError *error) {
// You should call processPendingChanges before inspecting deletedObjects of NSManagedObjectContext.
// At least if some relationships have deleteRule set to NSCascadeDeleteRule.
// http://stackoverflow.com/questions/5709302/when-and-how-often-to-call-processpendingchanges-to-ensure-graph-integrity
// if(saved) [bmoc processPendingChanges];
}];
MIT