2014-10-17 11 views
0

때때로 서버 응답에서 작성된 다른 임시 관리 오브젝트로 이미 지속되는 관리 오브젝트를 갱신해야합니다. 임시 객체는 버려 져야하며 다른 객체는 업데이트 작업 후에 즉시 저장되어야합니다. MagicalRecord (MR) 2.3에서는 ++가과 같이 객체를 저장하는 것이 좋습니다 :MagicalRecord 2.3 임시 오브젝트

- (void)updateObject:(NSManagedObject*)alreadyPersistedObject withDictionary:(NSDictionary*)dictionary { 
    [MagicalRecord saveWithBlock:^(NSManagedObjectContext *localContext) { 
     NSManagedObject *updatedObject = [NSManagedObject MR_createEntityInContext:localContext]; 
     [MyParserHandler parseDictionary:dictionary intoManagedObject:updatedObject]; 

     // update some properties of alreadyPersistedObject using updatedObject 
    }]; 
} 

나는 우리가 MR 이전 버전의 임시 로컬 컨텍스트를 사용하여 임시 개체를 초기화해야한다고 알고있다. MR 2.3 이상에서도 마찬가지입니까?

예, 누군가가 나를 위해 코드 예제를 제공 할 수 및 임시 컨텍스트를 [NSManagedObjectContext MR_defaultContext]의 자식 수 및 사용 후이 컨텍스트를 삭제하는 방법?

아니요, 지금이 작업을 수행하는 데 가장 적합한 기술은 무엇입니까?

도움을 주셔서 감사합니다.

답변

1

문제를 다시 해결하기 위해 기존 데이터를 외부 데이터 원본에서 핵심 데이터 저장소로 업데이트하려고합니다. 백그라운드 컨텍스트를 만들고이 외부 데이터를 가져올 임시 개체를 가지고 저장하십시오. 따라서 새로운 변경 사항을 기존의 메모리 내 개체로 전달해야합니다.

이 경우 해당 메소드의 본문 만 사용하면 MagicalRecord에서 제공하는 기본 컨텍스트가 해당 블록 완료시 해당 업데이트를 갖게됩니다. MagicalRecord는 당신을 위해 그 병합 작업을 많이하려고합니다. saveWithBlock: 메서드 내에서 임시 개체를 만들면 결국 변경 내용이 기본 컨텍스트에 병합됩니다. 따라서 개체가 해당 컨텍스트에있는 경우 저장 한 결과로 해당 변경 사항을 받게됩니다.

데이터 병합을 좀 더 제어해야하는 경우 수동으로 병합하는 대신 기본 제공되는 핵심 데이터 병합 메커니즘을 사용하는 것이 좋습니다. 이 경우 부모/자식 컨텍스트 관계를 사용하거나 NSManagedObjectContextDidSaveNotification을 사용하여 다른 컨텍스트의 변경 내용을 병합해야합니다. 이러한 솔루션의 코드는 인터넷에서 매우 일반적입니다.

+0

아니요, 내가 알아야 할 핵심 포인트는 다음과 같습니다. 던지기 오브젝트 생성 방법 - 생성해야하지만 영구 저장소에 저장하지 않으려는 오브젝트. – blackjacx

+2

컨텍스트에서 삭제하십시오. 그들은 지속되지 않을 것입니다. 또는 컨텍스트가 할당 해제 될 때 생성하는 모든 개체가 사라지는 "스크래치 컨텍스트"를 만들 수 있습니다. – casademora

+0

괜찮습니다. – blackjacx