Raymond Moay Raymond Moay - 2 months ago 24x
iOS Question

Realm setting custom fileURL confusion

I'm new to realm, and so as I was fooling around with it to learn it, I found something quite interesting. In my appDelegate:

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
let directory: NSURL = NSFileManager.defaultManager().containerURLForSecurityApplicationGroupIdentifier("group.Hobo.RealmDatabase")!
var config = Realm.Configuration()
config.fileURL = directory.filePathURL?.URLByAppendingPathComponent("db.realm")
Realm.Configuration.defaultConfiguration = config
let realm = try! Realm()
print("File Location: \(realm.configuration.fileURL!)") // -> Location A
print("NO OF USERS: \(realm.objects(User).count)") // -> 0
return true

but in my ViewController:

let realm = try! Realm()

override func viewDidLoad() {

print("NO OF USERS IN VIEWDIDLOAD: \(realm.objects(User).count)") // -> 1

let firstTime = loadFirstTime()
if firstTime {
// configure USER!
let user = User()
user.monthlyIncome = 50000
try! realm.write({
print("First time, user written")
dailyLimit.text = String(realm.objects(User).first!.dailyLimit)


Notice the returns from the print() functions. In app delegate, the result of the print(number of users:) returns 0, but in the viewController's viewDidLoad, it returned a 1.

Isn't both supposed to return the same value? In this case 1?

Thanks in advance!!


Yes it is the same, I'm guessing you removing by mistake the user, on application load, or something like that, you should use "Realm browser" to check your DB state, that way you can see when an object changes during run time. https://github.com/realm/realm-browser-osx


Check your accessing the default configuration. In realm you can have multiple configurations like so:

let config = Realm.Configuration(
    // Get the URL to the bundled file
    fileURL: NSBundle.mainBundle().URLForResource("MyBundledData", withExtension: "realm"),
    // Open the file in read-only mode as application bundles are not writeable
    readOnly: true)

// Open the Realm with the configuration
let realm = try! Realm(configuration: config)