2012-09-13 3 views
3

NSManagedObjectContextConcurrencyType에 대한 설명서를 이해할 수 없습니다. 다음과 같은 상황에서 어떤 유형을 사용해야하며 그 이유는 무엇입니까?IOS CoreData, NSManagedObjectContextConcurrencyType을 사용하는 이유는 무엇입니까?

- (void)viewDidLoad 
{ 
    self.managedObjectContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:???]; 
    [self loadRecordsFromCoreData]; 
} 


- (void)loadRecordsFromCoreData { 

[self.managedObjectContext performBlockAndWait:^{ 
    //[self.managedObjectContext reset]; //do I need to do this? 
    NSError *error = nil; 
    NSFetchRequest *request = [[NSFetchRequest alloc] initWithEntityName:@"Item"]; 

    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"display == YES"]; 
    [request setPredicate:predicate]; 
    [request setSortDescriptors:[NSArray arrayWithObject:[NSSortDescriptor sortDescriptorWithKey:@"order" ascending:YES]]]; 

    self.items = nil; 
    self.items = [self.managedObjectContext executeFetchRequest:request error:&error]; 

}]; 

[self displayItems]; 
} 

-displayItems는 등 item.image, item.title, item.descriptionText,

+0

여러 스레드에서 사용 하시겠습니까? – borrrden

+0

아니요. 개별보기 컨트롤러에 자체 컨텍스트가 있어야합니까? 아니면 그냥 애플 리케이션 대리인에 하나의 주요 컨텍스트가 있어야합니까? 이런 식으로 자신 만의 컨텍스트를 만드는 뷰 컨트롤러가 3 개 있습니다. – soleil

+0

문제는 스레드가 안전하지 않다는 것입니다. 한 스레드에서만 호출하려는 경우 기본 유형 (스레드 제한 유형)을 사용할 수 있습니다. 스레드 당 하나씩 만 필요합니다. – borrrden

답변

2

NSMainQueueConcurrencyType로 self.items 어레이에서 오브젝트의 속성에 기초하여 뷰를 표시 할 것이다.

보기와 같은 UI 이벤트가 주 스레드에서 발생합니다. 주 스레드 (이 경우에는 self.items)에서 개체를 조작하므로 해당 스레드에서 컨텍스트로 가져 오거나 저장해야합니다.

NSPrivateQueueConcurrencyType은 백그라운드 스레드에서 작업을 수행 할 컨텍스트입니다.

관련 문제