Objective c createOrUpdateInRealm:withObject:在使用同一对象更新时意外重置为多个关系
在您用自身更新领域对象时,似乎许多关系都会重置。以下代码将导致人和狗成为孤儿Objective c createOrUpdateInRealm:withObject:在使用同一对象更新时意外重置为多个关系,objective-c,realm,Objective C,Realm,在您用自身更新领域对象时,似乎许多关系都会重置。以下代码将导致人和狗成为孤儿 RLMRealm *realm = [RLMRealm defaultRealm]; [realm transactionWithBlock:^{ self.person.name = @"Fred"; NSLog(@"dogs before: %d", self.person.dogs.count); self.person = [Person createOrUpdateInRealm:re
RLMRealm *realm = [RLMRealm defaultRealm];
[realm transactionWithBlock:^{
self.person.name = @"Fred";
NSLog(@"dogs before: %d", self.person.dogs.count);
self.person = [Person createOrUpdateInRealm:realm withObject:self.person];
NSLog(@"dogs after: %d", self.person.dogs.count);
}];
控制台输出
我使用了create或update,因为此时我不知道我是否有一个新对象或以前保存的对象
我有其他功能,但我很好奇为什么这不起作用?我最好的猜测是,这与将数据映射到返回某些“意外”值的对象时使用的键值编码有关
有没有合适的方法来避免这个问题,或者我应该坚持我的替代方法?
功能替代品
在领域中,为对象的属性调用setter就足以更新该对象(只要您在写事务中) 使用持久化的
RLMObject
子类调用createOrUpdateInRealm
,将在数据库中创建该对象的副本,并且实际上将创建副本
简而言之,在这种情况下,您不应该调用
createOrUpdateInRealm
,而只是在写入事务中设置此人的name
属性。除了我描述的问题之外,它不会引发任何异常,工作正常。我同意你的观点,只要你的对象已经在一个领域中,设置名称就足够了。我希望澄清的主要问题是,为什么在使用同一对象创建或更新时,它会丢失其关系。“这似乎是不可取的行为。”nacross我们今天早上刚刚发布了一个解决问题的软件。请更新到0.90.3,并让我知道是否一切都适合你!
dogs before: 1
dogs after: 0
RLMRealm *realm = [RLMRealm defaultRealm];
[realm transactionWithBlock:^{
if (![self.person realm]) {
[realm addObject:self.person];
}
self.person.name = @"Fred";
}];