我使用的是Realm,该项目是1.0.0版本。
当我创建一个Realm Object
列表(包含从Web API获取的数据)时,尝试使用结构中的此实用程序函数将它们保存到Realm中:
static func saveRealmObjects(objects: [Object]) {
defer {
// Never entered
}
for object in objects {
let realm = try! Realm()
do {
try realm.write {
print("TEST: 1: object: \(object)")
realm.add(object)
print("TEST: 2")
}
} catch {
// Never entered
}
}
}
(请不要在确切的结构上判断我,我一直在四处寻找是否有效)。
我可以通过自由使用打印语句(大多数已在上面删除)告诉我该函数可以TEST: 1
正常,但无法将其转到TEST: 2
,因为第一个Object
在列表中我传递给函数。
我应该注意这个函数在我第一次使用数据时会起作用(比如在擦拭模拟器并重新启动应用程序之后),但是如果我重新创建Object
并尝试再次保存它们它被卡住了。
我假设Realm会使用Object
上的私钥,并在必要时覆盖任何私钥。但它似乎只是卡住了。
-
然后 - 在它被卡住之后 - 如果我尝试从Realm获取另一组结果(使用不同的Realm
对象),我会收到以下错误:
libc++abi.dylib: terminating with uncaught exception of type realm::InvalidTransactionException: Cannot create asynchronous query while in a write transaction
仅供参考我使用Realm
try! Realm()
对象
-
供参考,以下是我Object
试图保存的内容:
import Foundation
import RealmSwift
class MyObject: Object {
// MARK: Realm Primary Key
dynamic var id: String = ""
override static func primaryKey() -> String? {
return "id"
}
// MARK: Stored Properties
dynamic var date: NSDate? = nil
dynamic var numA = 0
dynamic var numB = 0
dynamic var numC = 0
dynamic var numD = 0
dynamic var numE = 0
dynamic var numF = 0
dynamic var numG = 0
dynamic var numH = 0
// MARK: Computed Properties
var computedNumI: Int {
return numD + numE
}
var computedNumJ: Int {
return numF + numG
}
}
(变量名称已更改。)
-
希望我做一些明显错误的事情 - 这是我第一次使用Realm。
如果您有任何想法,为什么它会坚持(或许它是一个线程问题?),或者想要更多信息,请回答或评论。谢谢。
答案 0 :(得分:1)
作为我聪明的木底鞋,我真的只是通过阅读文档找到了答案: https://realm.io/docs/swift/latest/#creating-and-updating-objects-with-primary-keys
添加到Realm行需要如下所示:
realm.add(object, update: true)
更新标记将更新已使用该主键保存的Object
。
-
虽然如果它在尝试添加相同的对象时发出某种明显的警告或崩溃,或者没有导致其他查询和写入Realm崩溃,那会很好。