2017-01-23 5 views
1

今日の拡張機能を持つアプリがあります。私todayExtensionさんのviewDidLoadでiOS Todayでエクステンションを使用する

let realmContext = try! Realm(fileURL: NSFileManager 
     .defaultManager() 
     .containerURLForSecurityApplicationGroupIdentifier("group.this.is.test")! 
     .URLByAppendingPathComponent("db.realm")) 

:MainAppにのAppDelegate.swift

let realmContext = try! Realm(fileURL: NSFileManager 
     .defaultManager() 
     .containerURLForSecurityApplicationGroupIdentifier("group.this.is.test")! 
     .URLByAppendingPathComponent("db.realm")) 

たものはまったく同じです。しかし、それはMainAppで動作し、今日の拡張でそれを使用したいときは、通知センターでUnable to loadとなります。 問題はレルムです。let realmContext = ...をコードから削除すると、今日の拡張は問題ありません。 どうしたのですか?

+0

今日の拡張機能でApp Groupが正しく設定されていることを確認してください。 Xcodeコンソールに表示されるエラーメッセージも提供できますか? – Dmitry

答えて

1

メモリが不足している可能性があります。 Realm(fileURL:) objc_copyClassList()を内部的に呼び出すと、大量のメモリが必要になります。アプリの拡張機能ではメモリが厳しく制限されているため、アプリの拡張機能では失敗することがあります。

これを避けるには、objectTypesの設定をRealm.Configurationで明示的に指定することができます。スキーマを明示的に指定すると、すべてのクラスを列挙する必要がないため、Realmはobjc_copyClassList()を呼び出しません。

let config = Realm.Configuration(
    fileURL: NSFileManager 
     .defaultManager() 
     .containerURLForSecurityApplicationGroupIdentifier("group.this.is.test")! 
     .URLByAppendingPathComponent("db.realm"), 
    objectTypes: [SomeClass.self, AnotherClass.self]) 
let realm = try Realm(configuration: config) 
... 
関連する問題