2016-03-03 38 views
0

假設我創建了一個RLMObject,該關係具有關係,我將繼續保存在我的領域數據庫中。完成之後,我決定在新創建的對象上調用initWithValues,並將此複製的對象返回到前端以供使用。我注意到它與它有關係的對象仍然被認爲是實例化的。創建RLMObject及其所有關係的非實例副本也是沒有意義的

有沒有辦法讓我這樣做,當我打電話給initWithValues來創建一個我的對象的未被證實的副本,以確保我的所有屬性都是沒有證據的?

+0

我猜你用'uninstantiated'這些對象是不持久的意思嗎?這就是我基於我的答案。 – marius

回答

0

沒有內在的方法來實現這一點。您需要自己創建一個獨立的對象副本。關係可以是循環的,所以一個通用的解決方案將是不平凡的。

+0

感謝您的回覆。我認爲這將是答案,但希望是錯的。謝謝! –

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; 
相關問題