2012-02-18 4 views
2

안녕 내 핵심 데이터베이스에서 개체를 복제하고 싶습니다. 지금은CoreData - 중복 기존 개체

 movement2 = [NSEntityDescription 
            insertNewObjectForEntityForName:@"Movement" 
            inManagedObjectContext:self.managedObjectContext]; 

     movement2.name = movement.name; 
     movement2.value = movement.value; 
     movement2.date = movement.date; 
     ... 

을 사용하고 있는데 작동합니다. 하지만 ...

movement의 모든 값을 코드 한 줄로 movement2으로 복사 할 수있는 방법이 있습니까?

답변

8

NSManagedObject는 NSObject와 달리 속성과 관계를 반복하는 API를 제공합니다. 또는 엔티티 설명이 수행합니다. 그것은 단 하나의 라이너가 아닙니다.

movement2 = [NSEntityDescription insertNewObjectForEntityForName:@"Movement" 
              inManagedObjectContext:self.managedObjectContext]; 
NSEntityDescription *entity = [movement entity]; 
for (NSString *propertyName in [entity propertiesByName]) { 
    [movement2 setValue:[movement valueForKey:propertyName] forKey:propertyName]; 
} 

자세한 내용은 the documentation을 참조하십시오.

이렇게하면 대부분의 개체를 복제 할 수 있습니다. 데이터베이스 구조가 올바른 경우이 방법으로 관계를 복사하면 역함수도 업데이트됩니다. 따라서 MovementDirection과 MovementDirection의 관계가 있고 MovementDirection이 1 대 다수 관계 인 parentMovements 인 경우 위 코드를 호출 한 후이 parentMovements 집합은 movementmovement2이 모두 포함됩니다.

+0

속성과 관계를 결합한'entity.propertiesByName'을 사용할 수 있습니다. 하나는 덜 루프;) – Michael

+0

@ 마이클 오 세상에, 내가 어떻게 그것을 놓친 두 개의 루프와 도우미 많은 코딩 된 단서가 없어! 고마워, 나는 그 대답을 편집했다. – coverback

1

NSCopying이나 NSCoding을 따르지 않으므로 NSManagedObjects을 복사하는 방법은 없습니다. 이러한 객체가 관계가있는 경우 객체를 복사하는 방법이 명확하지 않은 경우가 종종 있습니다. 동일한 객체 또는 객체의 사본과의 관계가 있어야합니까? 그 사본들은? 이들은 답변이 아마도 관계의 본질 (대다수 또는 일대일), 따라서 핵심 데이터의 특정 유스 케이스에 의존하는 어려운 질문입니다.

짧은 답변 : 귀하가 발췌 문장에서하고있는 일을 수행하거나 사본을 작성하는 방법을 쓸 수 있습니다. NSManagedObject에는 단순한 속성 만 있고 관계가 없으므로 간단해야합니다.