假設我創建了一個RLMObject
,該關係具有關係,我將繼續保存在我的領域數據庫中。完成之後,我決定在新創建的對象上調用initWithValues
,並將此複製的對象返回到前端以供使用。我注意到它與它有關係的對象仍然被認爲是實例化的。創建RLMObject及其所有關係的非實例副本也是沒有意義的
有沒有辦法讓我這樣做,當我打電話給initWithValues
來創建一個我的對象的未被證實的副本,以確保我的所有屬性都是沒有證據的?
假設我創建了一個RLMObject
,該關係具有關係,我將繼續保存在我的領域數據庫中。完成之後,我決定在新創建的對象上調用initWithValues
,並將此複製的對象返回到前端以供使用。我注意到它與它有關係的對象仍然被認爲是實例化的。創建RLMObject及其所有關係的非實例副本也是沒有意義的
有沒有辦法讓我這樣做,當我打電話給initWithValues
來創建一個我的對象的未被證實的副本,以確保我的所有屬性都是沒有證據的?
沒有內在的方法來實現這一點。您需要自己創建一個獨立的對象副本。關係可以是循環的,所以一個通用的解決方案將是不平凡的。
感謝您的回覆。我認爲這將是答案,但希望是錯的。謝謝! –
如果我理解正確的話,例如,可以實現在每個管理類的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;
我猜你用'uninstantiated'這些對象是不持久的意思嗎?這就是我基於我的答案。 – marius