- OrangeRealm helps you safety multithreading and UI integration using Realm
- Thread safety
- Simple interface
- Easy UI integration
- Support query limit, max, offset with filter, unlink
- Abstraction for life cycle of Realm
import OrangeRealm
import RealmSwift
import OrangeRealm
class SampleRealmManager: AbstractRealmManager {
// MARK: - Overridden: AbstractRealmManager
override class var shared: AbstractRealmManager {
struct Static {
static let instance = SampleRealmManager()
}
return Static.instance
}
override var schemaVersion: UInt64 {
return 1
}
override var fileURL: URL {
return URL(fileURLWithPath: "\(NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true).first!)/sample.realm", isDirectory: false)
}
override var objectTypes: [Object.Type]? {
return [SampleObject.self]
}
override func deleteAll(_ realm: Realm) {
realm.deleteAll()
}
override func process(forMigration migration: Migration, oldSchemaVersion: UInt64) {
}
override func recover() {
}
}
import RealmSwift
class SampleObject: Object {
dynamic var name: String?
dynamic var id: Int = 0
convenience init(id: Int, name: String?) {
self.init()
self.id = id
self.name = name
}
override class func primaryKey() -> String? {
return "id"
}
}
// Sync section for UITableView
// Update UITableView after add notification for realm
let result: RealmQueryResult<SampleObject> = SampleRealmManager.shared.query("id > 0", sortProperty: "id", ascending: false)
.set(section: 1)
.changed({ [weak self] (section, deletions, insertions, modifications) in
guard let weakSelf = self else {return}
weakSelf.tableView.beginUpdates()
weakSelf.tableView.deleteRows(at: deletions, with: .none)
weakSelf.tableView.insertRows(at: insertions, with: .none)
weakSelf.tableView.reloadRows(at: modifications, with: .none)
weakSelf.tableView.endUpdates()
})
self.tableView.reloadData()
let result: RealmQueryResult<SampleObject> = SampleRealmManager.shared.query()
let result: [SampleObject] = SampleRealmManager.shared.objects()
let result: Results<SampleObject> = SampleRealmManager.shared.results()
let result: RealmQueryResult<SampleObject> = SampleRealmManager.shared.query("id > 0", sortProperty: "id", ascending: false, limit: 10, max: 10)
let offset = 2
let result: RealmQueryResult<SampleObject> = SampleRealmManager.shared.query("id > 0", sortProperty: "id", ascending: false) { (object) -> Bool in
return object.id! > offset
}
let result: RealmQueryResult<SampleObject> = SampleRealmManager.shared.query("id > 0", sortProperty: "id", ascending: false, unlink: true)
CocoaPods is a dependency manager for Cocoa projects. You can install it with the following command:
$ gem install cocoapods
CocoaPods 1.1.0+ is required to build OrangeRealm 0.1.0+.
To integrate OrangeRealm into your Xcode project using CocoaPods, specify it in your Podfile
:
source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '8.0'
target '<Your Target Name>' do
pod 'OrangeRealm', '~> 0.1.0'
end
Then, run the following command:
$ pod install
Carthage is a decentralized dependency manager that builds your dependencies and provides you with binary frameworks.
You can install Carthage with Homebrew using the following command:
$ brew update
$ brew install carthage
To integrate Alamofire into your Xcode project using Carthage, specify it in your Cartfile
:
github "pisces/OrangeRealm" ~> 0.1.0
Run carthage update
to build the framework and drag the built OrangeRealm.framework
into your Xcode project.
iOS Deployment Target 8.0 higher
Steve Kim, [email protected]
OrangeRealm is available under the MIT license. See the LICENSE file for more info.