假设我创建了一个有关系的RLMObject
,我将继续保存在我的领域数据库中。完成后,我决定在新创建的对象上调用initWithValues
并将此复制的对象返回到前端以供使用。我注意到它与之有关系的对象仍然被认为是实例化的。
有没有办法让我在调用initWithValues
创建我的对象的未实例化副本时,确保我的所有属性都是未实例化的?
答案 0 :(得分:0)
没有内置的方法来实现这一目标。您需要自己创建对象的独立副本。关系可能是循环的,因此对此的通用解决方案将是非平凡的。
答案 1 :(得分:0)
例如,如果我理解正确,您可以在每个托管类中实现NSCopying
协议:
- (instancetype)copyWithZone:(NSZone *)zone {
//SomeClass *object = (SomeClass *)[super.class allocWithZone:zone];
SomeClass *object = [SomeClass new];
object->_isClone = YES;
object->_name = self.name.copy;
object->_age = self.age;
return object;
}
然后,在删除原件后,副本仍然可用。
还可以在NSCopying
的类别中实施RLMResults
协议:
- (instancetype)copyWithZone:(NSZone *)zone {
NSMutableArray *array = [NSMutableArray arrayWithCapacity:self.count];
for (RLMObject *object in self) {
[array addObject:object.copy];
}
return array.copy;
}
使用案例:
RLMResults *objects = [SomeObject objectsWhere:@"ANY nested.age < 99"];
NSArray<SomeObject*> *clones = objects.copy;