IRCoreDataStack 1.0.4

IRCoreDataStack 1.0.4

测试已测试
语言语言 Obj-CObjective C
许可 MIT
发布最新发布2016年4月

Nuno Salvador 维护。



  • Nuno Salvador

该堆栈基于该博客文章的性能分析建立了两个独立的 NSManagedObjectContext 实例:这篇博客文章。它会自动合并更改,在后台上下文和主上下文之间自动同步更改。支持自动数据库迁移。

内部原理

  • CRUD 操作在 IRCoreDataStack.backgroundManagedObjectContext 中进行,自动调用 contextSave,自动发送 NSManagedObjectContextDidSaveNotification。
  • 通过监听 NSManagedObjectContextDidSaveNotification 并跟随 mergeChangesFromContextDidSaveNotification,将这些更改合并到 IRCoreDataStack.managedObjectContext 中。
  • 应该在主 IRCoreDataStack.managedObjectContext 上执行取操作...

安装

Podfile

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