Skip to content
This repository has been archived by the owner on Feb 8, 2022. It is now read-only.

Commit

Permalink
Create realmIdentifier on Realm to suply path
Browse files Browse the repository at this point in the history
  • Loading branch information
polqf committed Jun 5, 2016
1 parent 9ee0579 commit 7fd770f
Show file tree
Hide file tree
Showing 4 changed files with 34 additions and 15 deletions.
22 changes: 12 additions & 10 deletions Example/RealmResultsController/ViewController.swift
Original file line number Diff line number Diff line change
Expand Up @@ -12,19 +12,21 @@ import RealmSwift
import RealmResultsController

class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate, RealmResultsControllerDelegate {

let tableView: UITableView = UITableView(frame: CGRectZero, style: .Grouped)
var rrc: RealmResultsController<TaskModelObject, TaskObject>?
var realm: Realm!
let button: UIButton = UIButton()
lazy var realmPath: String = {

lazy var realmConfiguration: Realm.Configuration = {
guard let doc = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory,
NSSearchPathDomainMask.UserDomainMask, true).first else { return "" }
NSSearchPathDomainMask.UserDomainMask, true).first else {
return Realm.Configuration.defaultConfiguration
}
let custom = doc.stringByAppendingString("/example.realm")
return custom
return Realm.Configuration(fileURL: NSURL(string: custom))
}()

required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
Expand All @@ -34,8 +36,8 @@ class ViewController: UIViewController, UITableViewDataSource, UITableViewDelega
if let _ = NSClassFromString("XCTest") {
return
}
realm = try! Realm(path: realmPath)

realm = try! Realm(configuration: realmConfiguration)

try! realm.write {
self.realm.deleteAll()
Expand Down Expand Up @@ -92,7 +94,7 @@ class ViewController: UIViewController, UITableViewDataSource, UITableViewDelega
let queue: dispatch_queue_t = dispatch_queue_create("label", nil)
dispatch_async(queue) {
autoreleasepool {
let realm = try! Realm(path: self.realmPath)
let realm = try! Realm(configuration: self.realmConfiguration)
try! realm.write {
let task = TaskModelObject()
task.id = 12345
Expand Down Expand Up @@ -124,7 +126,7 @@ class ViewController: UIViewController, UITableViewDataSource, UITableViewDelega
let queue: dispatch_queue_t = dispatch_queue_create("label", nil)
dispatch_async(queue) {
autoreleasepool {
let realm = try! Realm(path: self.realmPath)
let realm = try! Realm(configuration: self.realmConfiguration)
try! realm.write {
let task = TaskModelObject()
task.id = Int(arc4random_uniform(9999))
Expand Down
13 changes: 12 additions & 1 deletion Source/RealmExtension.swift
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,18 @@ import Foundation
import RealmSwift

extension Realm {


var realmIdentifier: String {
var realmIdentifier = ""
if let fileURL = configuration.fileURL {
realmIdentifier = fileURL.absoluteString
}
else if let identifier = configuration.inMemoryIdentifier {
realmIdentifier = identifier
}
return realmIdentifier
}

//MARK: Add

/**
Expand Down
10 changes: 8 additions & 2 deletions Source/RealmLogger.swift
Original file line number Diff line number Diff line change
Expand Up @@ -47,8 +47,14 @@ class RealmLogger {
Then clean the current state.
*/
func finishRealmTransaction() {
let name = realm.path.hasSuffix("testingRealm") ? "realmChangesTest" : "realmChanges"
NSNotificationCenter.defaultCenter().postNotificationName(name, object: [realm.path : temporary])
let realmIdentifier = realm.realmIdentifier
var notificationName = "realmChanges"

//For testing
if realmIdentifier == "testingRealm" { notificationName = "realmChangesTest" }

NSNotificationCenter.defaultCenter().postNotificationName(notificationName,
object: [realmIdentifier : temporary])
postIndividualNotifications()
cleanAll()
}
Expand Down
4 changes: 2 additions & 2 deletions Source/RealmResultsController.swift
Original file line number Diff line number Diff line change
Expand Up @@ -278,8 +278,8 @@ public class RealmResultsController<T: RealmSwift.Object, U> : RealmResultsCache

@objc func didReceiveRealmChanges(notification: NSNotification) {
guard case let notificationObject as [String : [RealmChange]] = notification.object
where notificationObject.keys.first == request.realm.path,
let objects = notificationObject[self.request.realm.path] else { return }
where notificationObject.keys.first == request.realm.realmIdentifier,
let objects = notificationObject[self.request.realm.realmIdentifier] else { return }
queueManager.addOperation {
self.refetchObjects(objects)
self.finishWriteTransaction()
Expand Down

0 comments on commit 7fd770f

Please sign in to comment.