SobjectiveRecord 0.3.0

SobjectiveRecord 0.3.0

测试已测试
语言语言 SwiftSwift
许可 MIT
发布最新发布2015年4月
SPM支持 SPM

hmhv 维护。



  • 作者:
  • hmhv

SobjectiveRecord 是 HobjectiveRecord 的 Swift 版本,支持 Xcode 6.3

HobjectiveRecord 受 ObjectiveRecord 启发并针对背景 NSManagedObjectContext 进行了定制。

在您使用之前,我建议您阅读以下文章

使用方法

  1. SobjectiveRecord 文件夹中的所有文件复制到您的项目中。
    或者使用 CocoaPods(CocoaPods)安装:pod 'SobjectiveRecord'

您应该使用支持 Swift 的 CocoaPods 版本 0.36
有关详细信息,请参阅 Pod Authors Guide to CocoaPods Frameworks

初始化

设置您的存储。

import SobjectiveRecord // when using CocoaPods

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {

    NSPersistentStoreCoordinator.setupDefaultStore()

    // your code here

    return true
}

基础

您的实体必须具有前缀(例如 projectName.entityName)

entity_prefix.png

您可以方便地对模型的 typealias 进行操作

// User, Tweet are NSManagedObject's subclass
typealias Users = SobjectiveRecord<User>
typealias Tweets = SobjectiveRecord<Tweet>

// so, it's same
var user = SobjectiveRecord<User>.create()
var user = Users.create()

使用 performBlock

NSManagedObjectContext.defaultContext.performBlock {
    // your code here
}

var moc = NSManagedObjectContext.defaultContext.createChildContext()
moc.performBlock {
    // your code here
}

创建 / 保存 / 删除

NSManagedObjectContext.defaultContext.performBlock {
    var t = Tweets.create()
    t.text = "I am here"
    t.save()

    t = Tweets.create(attributes: ["text" : "hello!!", "lang" : "en"])
    t.delete()
}

NSManagedObjectContext.defaultContext.performBlock {
    Tweets.deleteAll()
    NSManagedObjectContext.defaultContext.save()
}

查找器

NSManagedObjectContext.defaultContext.performBlock {
    var tweets = Tweets.all()

    var tweetsInEnglish = Tweets.find(condition: "lang == 'en'")

    var hmhv = Users.first(condition: "screenName == 'hmhv'")

    var englishMen = Users.find(condition: ["lang" : "en", "timeZone" : "London"])

    var predicate = NSPredicate(format: "friendsCount > 100")
    var manyFriendsUsers = Users.find(condition: predicate)
}

排序和限制

NSManagedObjectContext.defaultContext.performBlock {
    var sortedUsers = Users.all(order: "name")

    var allUsers = Users.all(order: "screenName ASC, name DESC")
    // or
    var allUsers2 = Users.all(order: "screenName A, name D")
    // or
    var allUsers3 = Users.all(order: "screenName, name d")

    var manyFriendsUsers = Users.find(condition: "friendsCount > 100", order: "screenName DESC")

    var fiveEnglishUsers = Users.find(condition: "lang == 'en'", order: "screenName ASC", fetchLimit: 5)
}

聚合

NSManagedObjectContext.defaultContext.performBlock {
    var allUserCount = Users.count()

    var englishUserCount = Users.count(condition: "lang == 'en'")
}

批量更新

NSManagedObjectContext.defaultContext.performBlock {

    Users.batchUpdate(condition: "friendsCount > 10", propertiesToUpdate: ["friendsCount": 0])

    // update all entities
    Users.batchUpdate(propertiesToUpdate: ["friendsCount": 100])
}

NSFetchedResultsController

NSManagedObjectContext.defaultContext.performBlock {
    var frc = Users.createFetchedResultsController(order: "name")
    frc.delegate = self

    var error: NSError? = nil
    if frc.performFetch(&error) {
        self.reloadData()
    }
}

自定义 ManagedObjectContext

var childContext = NSManagedObjectContext.defaultContext.createChildContext()

childContext.performBlock {
    var john = Users.create(context: childContext)
    john.name = "John"
    john.save()

    var savedJohn = Users.first(condition: "name == 'John'", context: childContext)

    var manyFriendsUsers = Users.find(condition: "friendsCount > 100", order: "screenName DESC", context: childContext)

    var allUsers = Users.all(context: childContext)
}

自定义 CoreData 模型或 .sqlite 数据库

如果您已手动添加 Core Data,则可以更改自定义模型和数据库名称。

var modelURL = NSURL.defaultModelURL(modelName: "model_name")
NSPersistentStoreCoordinator.setupDefaultStore(modelURL: modelURL)

// or
var storeURL = NSURL.defaultStoreURL(fileName: "file_name.sqlite")
NSPersistentStoreCoordinator.setupDefaultStore(storeURL: storeURL)

映射

大多数时候,您的 JSON 网络服务返回的键如 first_namelast_name 等。
您的 Swift 实现的属性具有大驼峰式命名 - firstNamelastName

大驼峰式命名自动受支持 - 您不需要做任何事情!否则,如果您有更复杂的映射,可以这样操作

!! 日期、可转换类型和关系不支持 !!

// just override +mappings in your NSManagedObject subclass
extension User
{
    override class var mappings: [String: String]? {
        return ["description" : "userDescription"]
    }
}
// first_name => firstName is automatically handled

测试

SobjectiveRecord 支持CoreData的内存存储。在任何地方,在测试开始运行之前,只需调用

NSPersistentStoreCoordinator.setupDefaultStore(useInMemoryStore: true)

许可

SobjectiveRecord 在MIT许可下可用。有关更多信息,请参阅LICENSE文件。