DATAStack 8.2.1

DATAStack 8.2.1

测试已测试
Lang语言 SwiftSwift
许可证 NOASSERTION
发布最新发布2020年10月
SPM支持 SPM

Elvis Nuñez维护。



DATAStack 8.2.1

  • 作者:
  • Elvis Nuñez

DATAStack

DATAStack 帮助您减轻 Core Data 程序的样板代码。现在,您可以将 AppDelegate 中所有与 Core Data 相关的代码移除,并用 DATAStack 实例替换(ObjCSwift)。

  • 更简单的线程安全
  • 在使用单元测试时,可以同步运行
  • 无单例
  • 开箱即支持 SQLite 和 InMemory
  • 简单的数据库删除方法
  • 与 Swift 紧密集成
  • 兼容 Objective-C
  • 免费

目录

运行演示

  • 克隆仓库
  • 打开 Demo.xcodeproj
  • 享受吧!

初始化

您可以使用您的 Core Data 模型名称(xcdatamodel)轻松初始化一个新的 DATAStack 实例。

Swift

let dataStack = DATAStack(modelName:"MyAppModel")

Objective-C

DATAStack *dataStack = [[DATAStack alloc] initWithModelName:@"MyAppModel"];

有多种方法可以初始化 DATAStack

  • 使用自定义存储类型。
let dataStack = DATAStack(modelName:"MyAppModel", storeType: .InMemory)
  • 使用另一个包和一个存储类型,比如说你的测试包和.InMemory存储类型,非常适合运行单元测试。
let dataStack = DATAStack(modelName: "Model", bundle: NSBundle(forClass: Tests.self), storeType: .InMemory)
  • 为你的.sqlite文件使用不同于你的模型名的名称,例如CustomStoreName.sqlite
let dataStack = DATAStack(modelName: "Model", bundle: NSBundle.mainBundle(), storeType: .SQLite, storeName: "CustomStoreName")
  • 提供不同的容器URL,默认情况下我们将使用文档文件夹,大多数应用程序都这样做,但如果你想在主应用程序和应用程序扩展之间共享sqlite文件,你将需要这个。
let dataStack = DATAStack(modelName: "Model", bundle: NSBundle.mainBundle(), storeType: .SQLite, storeName: "CustomStoreName", containerURL: sharedURL)

主线程 NSManagedObjectContext

通过使用 mainContext 属性,获取与主线程关联的 NSManagedObjectContext 与此非常简单。

self.dataStack.mainContext

或者

self.dataStack.viewContext

后台线程 NSManagedObjectContext

你可以轻松创建新的后台 NSManagedObjectContext 用于数据处理。此块完全异步,将在后台线程上运行。

为了与 NSPersistentContainer 兼容,你也可以使用 performBackgroundTask 而不是 performInNewBackgroundContext

Swift

func createUser() {
    self.dataStack.performInNewBackgroundContext { backgroundContext in
        let entity = NSEntityDescription.entityForName("User", inManagedObjectContext: backgroundContext)!
        let object = NSManagedObject(entity: entity, insertIntoManagedObjectContext: backgroundContext)
        object.setValue("Background", forKey: "name")
        object.setValue(NSDate(), forKey: "createdDate")
        try! backgroundContext.save()
    }
}

Objective-C

- (void)createUser {
    [self.dataStack performInNewBackgroundContext:^(NSManagedObjectContext * _Nonnull backgroundContext) {
        NSEntityDescription *entity = [NSEntityDescription entityForName:@"User" inManagedObjectContext:backgroundContext];
        NSManagedObject *object = [[NSManagedObject alloc] initWithEntity:entity insertIntoManagedObjectContext:backgroundContext];
        [object setValue:@"Background" forKey:@"name"];
        [object setValue:[NSDate date] forKey:@"createdDate"];
        [backgroundContext save:nil];
    }];
}

当使用 Xcode 的 Objective-C 自动完成时,backgroundContext 参数名没有包括在内。请确保添加它。

清理

通过调用 drop,删除.sqlite文件并重置你的 DATAStack 的状态非常简单。

Swift

self.dataStack.drop()

Objective-C

[self.dataStack forceDrop];

测试

DATAStack 专为单元测试优化,并在测试环境中同步运行。希望你现在不需要使用 fewer XCTestExpectations。

如果你的 Core Data 模型位于你的应用程序包中,可以创建一个使用内存存储的堆栈如下

Swift

let dataStack = DATAStack(modelName: "MyAppModel", bundle: NSBundle.mainBundle(), storeType: .InMemory)

Objective-C

DATAStack *dataStack = [[DATAStack alloc] initWithModelName:@"MyAppModel"
                                                     bundle:[NSBundle mainBundle]
                                                  storeType:DATAStackStoreTypeInMemory];

如果你的 Core Data 模型位于你的测试包中

Swift

let dataStack = DATAStack(modelName: "MyAppModel", bundle: NSBundle(forClass: Tests.self), storeType: .InMemory)

Objective-C

DATAStack *dataStack = [[DATAStack alloc] initWithModelName:@"MyAppModel"
                                                     bundle:[NSBundle bundleForClass:[self class]]
                                                  storeType:DATAStackStoreTypeInMemory];

(提示:也许您还没有找到最佳使用NSFetchedResultsController的方法,看看这里(链接)。)

迁移

如果由于迁移处理不当,DATAStack无法创建您的持久协调器,则它将销毁您的数据并创建一个新的sqlite文件。对于这种情况下正常的Core Data行为是使您的应用在启动时崩溃。这很不好玩。

安装

您可以通过CocoaPods获取DATAStack。要安装它,只需在您的Podfile中添加以下行

use_frameworks!

pod 'DATAStack', '~> 6'

您也可以通过Carthage获取<强>DATAStack。要安装它,只需在您的Cartfile中添加以下行

github "SyncDB/DATAStack" ~> 6.0

做得好

如果有什么看起来很愚蠢,请创建一个友好且建设性的问题,得到您的反馈将很棒。

祝您愉快。

作者

埃尔维斯·努涅兹, @3lvis

许可

DATAStack可在MIT许可下获得。有关更多信息,请参阅LICENSE文件。