OSX 10.12.3のMacOS/OSXアプリケーションでRealmSwiftを使用していて、データベースからオブジェクトを取得しようとするとUncaught例外が発生してクラッシュします。レルムオブジェクトを取得しようとするとキャッチされない例外が発生してスウィフトがクラッシュする
はここでGETオブジェクトFUNCにクラッシュするコードスニペットです:
private var database: Realm!
init(some_var: String) {
var configuration = Realm.Configuration()
configuration.fileURL = configuration.fileURL!.deletingLastPathComponent().appendingPathComponent("\(some_var).realm")
do {
debugPrint("Inside init: Current thread \(Thread.current)")
self.database = try Realm(configuration: configuration)
} catch {
debugPrint("realmInit: Can't create realm database.")
}
}
func getObject<T: Object, K>(with primaryKey: K) -> T? {
debugPrint("Inside getObject: Current thread \(Thread.current)")
return self.database.object(ofType: T.self, forPrimaryKey: primaryKey) // THIS LINE THROWS EXCEPTION
}
私がキャッチされない例外でクラッシュを取得する:まず
"Inside init: Current thread <NSThread: 0x600000075700>{number = 5, name = (null)}"
"Inside getObject: Current thread <NSThread: 0x600000075700>{number = 5, name = (null)}"
libc++abi.dylib: terminating with uncaught exception of type NSException
私はそれがスレッドの問題だと思ったが、私はRealmとgetObjectを同じスレッドで初期化することがわかります。
お願いします。
おそらくconfiguration.fileURL == nil、なぜ奇妙な強制アンラッピングを使用していますか? – user3441734
興味深いことに、私はそれが問題であるかどうか試してみて、見つけたものに返信します。どうして私はなぜtbellをアンラップするのかわからない、私はちょうどどこかのサンプルからそれをつかんでいたに違いないと思う。 – Gix
それは問題ではないことが判明しました。下記の回答を参照してください。 – Gix