1

내 iPhone에서 백그라운드 스레드의 MOC (관리 객체 컨텍스트)를 사용하여 내 서버의 메시지를 내 데이터베이스에 저장된 메시지와 동기화합니다. 중복을 막기 위해 술어를 사용하여 새 메시지의 ID를 가져오고이 메시지가 이미 데이터베이스에 있는지 확인합니다. 가져 오기가 끝나면 배경 스레드의 MOC를 기본 스레드의 기본 MOC와 병합합니다. 여태까지는 그런대로 잘됐다.백그라운드 스레드에서 관리 객체 컨텍스트 업데이트

그러나 사용자가 메인 스레드에 새 메시지를 작성하는 경우 동안 메시지는 동기화됩니다 (그리고 나는 이미 중복 확인하기 위해 배경 MOC에 인출했다) 내가 중복 된 메시지를 방지하기 위해 배경 MOC를 업데이트 할 수있는 방법 ?

안부 카슨

답변

0

당신은 NSManagedObjectContextDidSaveNotification 관찰하여 메인 스레드에서 변경 알림을받을 수 있습니다

: 방법은 NSNotification 매개 변수를 사용 :

[[NSNotificationCenter defaultCenter] 
    addObserver:self 
    selector:@selector(updateMessages:) 
    name:NSManagedObjectContextDidSaveNotification 
    object:mainManagedObjectContext]; 

귀하의 updateMessages을

- (void)updateMessages:(NSNotification *)notification { [myManagedObjectContext mergeChangesFromContextDidSaveNotification:notification]; } 

[notification userInfo]을 사용하면 업데이트에 대한 세부 정보를 얻을 수 있습니다.

+0

내가 알기로는 알림이 생성 된 스레드에 게시됩니다. 내 가져 오기는 NSOperation에서 실행됩니다. 백그라운드 스레드에서 updateMessages 메서드를 호출하는 방법 (performSelector : onThread ...를 호출하는 백그라운드 스레드에 대한 참조를 얻는 방법을 모르겠습니다)? – SamVimes

+0

myManagedObjectContext에서 performBlock :을 사용하여 자체 대기열에서 병합을 실행할 수 있습니다. initWithConcurrencyType : NSPrivateQueueConcurrencyType을 사용하도록 만들 때 꼭 확인하십시오. – Yonat

관련 문제