2014-04-11 2 views
4

두 개의 NSManagedObjectContext (하나는 UI 용이고 다른 하나는 백그라운드 작업 용)입니다. 배경이 변경 될 때마다 UIcontext에 변경 내용을 병합하려고합니다. 내가mergeChangesFromContextDidSaveNotification 메모리를 사용합니다.

mergeChangesFromContextDidSaveNotification:notification 

를 호출 할 때마다 그러나 그것은 단지 메모리를 먹기 시작 (뜻이 시뮬레이터에 최대 1GB 간다)과 충돌을 일으킬. 코스 I 설정의

알림 :

[[NSNotificationCenter defaultCenter] addObserver:self 
              selector:@selector(coreUpdateFromApp:) 
               name:NSManagedObjectContextDidSaveNotification 
               object:nil]; 

가도 등 운, 메인 쓰레드에 병합을하고 시도!

URIRepresentation이 문제를 일으키는 것으로 나타났습니다. 웬일인지 그것이 계속 전화 받고있다. (Apple의 코드가 아닌)

나는 초 단위로 실행되도록하고 64.95MB를 사용하면 동일한 호출 트리를 사용하여 매우 빠르게 커질 것이라는 점에 유의하십시오. 계속 실행하면 OSS 충돌이 발생합니다!

Profiler result

+0

하지 선택 방법으로

NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(managedObjectContextDidSave(_:)), name: NSManagedObjectContextDidSaveNotification, object: nil) 

아래 답변,하지만 당신은 아이 부모 컨텍스트 동시성 모드를 사용하지 않는 이유는 어떤 이유라도 있나요? 스레드 제한 컨텍스트보다 관리가 훨씬 간단합니다. –

+0

@LeoNatan 앱이 나에게 쓴 것이 아니고 상속 받았다. 그리고 이미 그것을 바꾸는 것이 가치가없는 중계가 많이 있습니다. – Mojtaba

답변

4

문제는 object:nil입니다. 당신은 끝없는 알림의 울림을 듣고 있습니다.

알림을 수신하려면 특정 컨텍스트 개체를 지정해야합니다.

+0

나는 아무런 차이도없이 노력했다. mergeChangesFromContextDidSaveNotification을 호출하면 문제가 발생합니다. – Mojtaba

+0

그런 다음 계측기를 사용하여 프로파일 링해야합니다. –

+0

그냥 결과를 업로드했습니다 – Mojtaba

0

Google 애널리틱스에서도 핵심 데이터를 사용하므로 Google 애널리틱스에서 끝내주는 알림을 가로 채고 있습니다.

개체를 nil이 아닌 값으로 설정하면 작동하지 않습니다. 다른 방법으로 발견하고 그것은 마술처럼 나를 위해 일했습니다. 당신의 관찰자 내부

나는

func managedObjectContextDidSave(notification: NSNotification) { 
    if notification.object?.persistentStoreCoordinator != self.persistentStoreCoordinator { 
     return 
    } 
    //do remaining task here. 
} 
관련 문제