Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 分配对象时出现领域错误_Swift_Realm - Fatal编程技术网

Swift 分配对象时出现领域错误

Swift 分配对象时出现领域错误,swift,realm,Swift,Realm,我在iOS项目中使用了带Swift的Realm 我有一个领域对象,它又包含对其他领域对象的引用。我注意到一些奇怪的行为,设置引用会导致主键错误,如下所示: Terminating app due to uncaught exception 'RLMException', reason: 'Can't create object with existing primary key value '35834'.' 奇怪的是我只是设定了一个参考。我有两个对象(ObjectA和ObjectB),每

我在iOS项目中使用了带Swift的Realm

我有一个领域对象,它又包含对其他领域对象的引用。我注意到一些奇怪的行为,设置引用会导致主键错误,如下所示:

 Terminating app due to uncaught exception 'RLMException', 
reason: 'Can't create object with existing primary key value '35834'.'
奇怪的是我只是设定了一个参考。我有两个对象(ObjectA和ObjectB),每个对象都有自己的主键

public class ObjectA: Object{
    dynamic public var objectReference:ObjectB?
当我第一次使用objectReference执行此操作时,效果很好。只是当我使用相同的objectReference进行后续更新时,它似乎出了问题

如果我第一次通过update调用将对象添加到领域中:true things是可以的,但这感觉有点粗糙。也许这是正确的选择?或者我错过了一个关于领域的要点。将一个对象隐式地分配给另一个对象是否会尝试将该对象添加到域中


谢谢

这取决于您正在使用哪个API来写入域。使用
realm.add(quo:update:)
并将
update
设置为false时,将始终尝试将该对象添加为该对象和任何子对象的新副本。如果您有一个主键,它将触发您在上面看到的异常。如果您没有主键,它将添加该对象的整个第二个副本(您可能也不需要)

realm.add(uquo:update:true)
的要点主要是针对REST API模式,您可以不断地从服务器更新对象,realm可以在第一次智能地将对象添加到数据库中,然后在后续调用中简单地更新该对象

如果两个对象都已在领域中,并且您知道不需要添加或更新逻辑,那么直接分配子对象可能比使用
add
API更合适:

let realm = try! Realm()

let parentObject: ObjectA = ...
let childObject: ObjectB = ...

try! realm.write {
   parentObject.objectReference = childObject
}

谢谢你的回答。事实证明,问题在于我在分配对象B之前,将其存储在领域中。第一次分配时,这是正常的,但此后任何时候分配对象时,它都会抛出异常。在某种程度上说是有道理的