【发布时间】:2015-01-26 09:28:41
【问题描述】:
当您使用自身更新领域对象时,似乎许多关系都被重置了。以下代码将导致人狗成为孤儿。
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);
}];
控制台输出
dogs before: 1
dogs after: 0
我使用了 create 或 update,因为此时我不知道我是否有一个新对象或以前的持久对象。
我有可用的替代方案,但我很好奇为什么这不起作用?我最好的猜测是它与用于将数据映射到返回一些对象的键值编码有关“意外”值。
有什么合适的方法可以避免这个问题,还是我应该坚持我的替代方法?
功能替代
RLMRealm *realm = [RLMRealm defaultRealm];
[realm transactionWithBlock:^{
if (![self.person realm]) {
[realm addObject:self.person];
}
self.person.name = @"Fred";
}];
【问题讨论】:
标签: objective-c realm