해명

2014-01-13 3 views
2
, 내가 읽어

다음해명

당신은 새로운 중첩 된 컨텍스트

을 기능과 함께이 동시성 유형을 사용할 수 없습니다

예를 들어, NSOperation 서브 클래스 내에서이 작업을 수행 할 수 있기 때문에이 문장은 나에게 아주 이상합니다.

NSManagedObjectContext * localMOC = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSConfinementConcurrencyType]; 
[localMOC setParentContext:[self mainContext]]; 

외부에서 mainContext을 주입 할 수 있으며 유형은 NSMainQueueConcurrencyType입니다.

내가 누락 된 항목이 있습니까?

답변

2

예, 해당 설명서는 입니다. 불량한입니다. 내가 이전에 테스트 한

NSManagedObjectContext *moc = [[NSManagedObjectContext alloc] init]; 
[moc setParentContext:[self managedObjectContext]]; 

을하고 오류와 함께 실패 않은 : 나는 뜻을 어떻게 생각해

는 사용할 수 없다는 것입니다. YMMV는 물론 iOS 5.x에서 테스트했습니다. 잘 작동하고 새로운 코어 데이터 디자인의 일부입니다

NSManagedObjectContext * localMOC = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSConfinementConcurrencyType]; 
[localMOC setParentContext:[self mainContext]]; 

:와 다른

.

두 초기화 장치 사이에 약간의 차이점이 있으며 오래된, 기록있는 초기화 프로그램에서 부모 - 자식 컨텍스트가 제대로 작동 할 수있게하는 몇 가지 주요 구성 요소가 누락되었습니다.

+1

흠, 나는 자식 컨텍스트를 추가하고 싶었 기 때문에 개인 큐 유형으로 몇 번 변경해야한다고 확신했습니다. 부모로서 제한된 유형을 사용하는 것에 대해 이상한 행동이나 오류가 발생하고 있음을 확신하십시오. 어떤 이유로 든 이러한 유형의 오류는 매번 발생하지는 않지만 변경 작업을 수행하고 이상한 시간에 나타나면 문제가 발견됩니다. –

+1

그 이상으로 제한 대기열은 컨텍스트가 생성 된 스레드에 의해 액세스되고 변형 될 것으로 예상합니다. 하위 MOC가 다른 스레드에서 변경 사항을 푸시하는 경우, 정의되지 않은 동작을 요청하는 것입니다. – CodaFi

+0

니스. 몇 가지 테스트를 해주셔서 감사합니다. –

1

내가 잘못 될 수 있지만 짧은 테스트에 따라입니다 NSConfinementConcurrencyType

에 제한이 당신은 새로운 중첩 된 컨텍스트

기능과 함께이 동시성 유형을 사용할 수 없다는 것을 나에게 보인다 수

부모 컨텍스트에 적용되고 하위 컨텍스트에는 적용되지 않습니다. 그래서 한 [self mainContext]

NSManagedObjectContext * localMOC = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSConfinementConcurrencyType]; 
[localMOC setParentContext:[self mainContext]]; 

작품, 주 또는 개인 큐 동시성 유형으로 작성되었습니다.

+0

그것이 의미하는 바라면 나는 생각보다 더 가난하게 말로 표현했다. : 그렇다고 말하면서, 나는 독서가 정확하지 않다고 생각하지 않기 때문에 이전에 제한된 MOC에 아이들을 붙였다. –

+0

@ MarcusS.Zarra : 제한된 MOC (또는 기본 MOC)에 자식을 연결하면 자식 MOC의 유형과 관계없이 ''부모 NSManagedObjectContext가 NSPrivateQueueConcurrencyType 또는 NSMainQueueConcurrencyType 중 하나를 사용해야합니다. ''라는 오류가 발생하여 충돌이 발생합니다. –

+0

흥미 롭습니다. 시간을내어 그 예를 찾거나 기억 문제를 확인하십시오. 두 번 확인해 주셔서 감사합니다 :) –