iOS 7에서 핵심 데이터 스레드 관리

Jagveer Singh Rajput

주 스레드의 목적 c에서 Core 데이터를 사용하면 데드락이 발생합니다. 이것을 관리하기 위해 나는 NSMainQueueConcurrencyType을 사용하고 다른 하나는 NSPrivateQueueConcurrencyType을 사용하는 Managed Object Context를 사용하고 있습니다. 다음은 코드입니다.

 - (NSManagedObjectContext *)mainQueueContext
 {
  if (!_mainQueueContext) {
    _mainQueueContext = [[NSManagedObjectContext alloc]   initWithConcurrencyType:NSMainQueueConcurrencyType];
    _mainQueueContext.persistentStoreCoordinator = self.persistentStoreCoordinator;
   }

   return _mainQueueContext;
 }

- (NSManagedObjectContext *)privateQueueContext
{
  if (!_privateQueueContext) {
    _privateQueueContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSPrivateQueueConcurrencyType];
    _privateQueueContext.persistentStoreCoordinator =     self.persistentStoreCoordinator;
    }

 return _privateQueueContext;
}

나는 또한 알림을 설정했습니다-

- (void)contextDidSavePrivateQueueContext:(NSNotification *)notification
{
  @synchronized(self) {
    [self.mainQueueContext performBlock:^{
        [self.mainQueueContext  mergeChangesFromContextDidSaveNotification:notification];
    }];
  }
}

- (void)contextDidSaveMainQueueContext:(NSNotification *)notification    
{
 @synchronized(self) {
    [self.privateQueueContext performBlock:^{
        [self.privateQueueContext     mergeChangesFromContextDidSaveNotification:notification];
    }];
  }
}


- (id)init
 {
  self = [super init];
  if (self) {
    [[NSNotificationCenter defaultCenter] addObserver:self   selector:@selector(contextDidSavePrivateQueueContext:)name:NSManagedObjectContextDidSaveNotification object:[self privateQueueContext]];
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(contextDidSaveMainQueueContext:) name:NSManagedObjectContextDidSaveNotification object:[self mainQueueContext]];
   }
   return self;
 }

 - (void)dealloc
 {
 [[NSNotificationCenter defaultCenter] removeObserver:self];
 }

이제 내 문제는 백그라운드 큐의 Core 데이터에서 레코드를 가져 오는 것입니다. 레코드를 가져 오기위한 내 코드는-

 -(NSArray *)fetchNameForStr:(NSString *)str
 {
  NSManagedObjectContext *childContext=[CoreDataStore privateQueueContext];
  __block NSArray *array=nil;
  [childContext performBlock:^{
  NSFetchRequest *request = [[NSFetchRequest alloc] init];
  [request setEntity:[NSEntityDescription entityForName:@"Entity" inManagedObjectContext:childContext]];
  NSPredicate *predicate=[NSPredicate predicateWithFormat:@"(name=%@)", str];
  [request setPredicate:predicate];
  [request setResultType:NSDictionaryResultType];
  NSError *error = nil;
  array = [childContext executeFetchRequest:request error:&error];
  return array;

  }];
return dict;
}

위의 함수는 가져 오기가 비동기 적으로 수행되기 때문에 nil을 반환합니다. 완료 핸들러를 넣는 방법은 무엇입니까? 이 함수에서 반환 할 수있는 결과를 어떻게 얻을 수 있습니까? 같은 방식으로 핵심 데이터에 레코드를 저장하고 있습니다. 저장 및 가져 오기 동기화에도 문제가 있습니까?

이 핵심 데이터 스레드 문제에 갇혀 있습니다. 이것에서 벗어나도록 도와주세요.

Skyylex

비동기 요청을 사용하는 경우 결과를 얻는 가장 간단한 방법은 블록을 인수로 사용하고 반환 유형을 void로 변경하는 것 입니다. 그리고 블록의 끝에서-결과와 함께 인수 블록을 호출하십시오. 이 같은:

typedef void (^ResultBlockType)(NSArray *resultArray, NSError *error);

- (void)fetchNameForStr:(NSString *)str resultBlock:(ResultBlockType)resultBlock {
        NSManagedObjectContext *childContext = [CoreDataStore privateQueueContext];
        __block NSArray *array = nil;
        [childContext performBlock:^{
         NSFetchRequest *request = [[NSFetchRequest alloc] init];
        [request setEntity:[NSEntityDescription entityForName:@"Entity" inManagedObjectContext:childContext]];
        NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(name=%@)", str];
        [request setPredicate:predicate];
        [request setResultType:NSDictionaryResultType];
        NSError *error = nil;
        array = [childContext executeFetchRequest:request error:&error];
        resultBlock(array, error)

    }];
}

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

iOS 핵심 데이터-엔티티에 관련 데이터 추가

분류에서Dev

핵심 데이터 다 대다 관계에서 중복 레코드 허용

분류에서Dev

Xcode는 "핵심 데이터"레코드를 관리합니다.

분류에서Dev

계층 관계를 통해 핵심 데이터에 액세스

분류에서Dev

iOS 7의 핵심 데이터를 사용하여 이미지 다운로드

분류에서Dev

iOS 7의 핵심 데이터를 사용하여 이미지 다운로드

분류에서Dev

.xcdatamodel의 핵심 데이터에서 다 대다 관계를 만드는 방법

분류에서Dev

핵심 데이터에 plist로드

분류에서Dev

iOS 핵심 데이터-비 선택에서 선택으로 관계 변경을위한 경량 마이그레이션

분류에서Dev

IOS 기존 핵심 데이터에 더 많은 관계를 추가 한 후 핵심 데이터를 활용하는 방법

분류에서Dev

iOS : JSON에서 핵심 데이터 DB 업데이트

분류에서Dev

iOS, 핵심 데이터. 다중 스레드 사용시 매우 느림

분류에서Dev

iOS Swift 앱의 핵심 데이터에서 이상한 동작

분류에서Dev

iOS-앱 삭제 및 백그라운드에서 핵심 데이터 업데이트 (목표 C)

분류에서Dev

iOS 핵심 데이터 "낙관적 잠금 실패"

분류에서Dev

iOS 핵심 데이터 일대 다 관계

분류에서Dev

iOS : 핵심 데이터, Auto ID와의 관계 수

분류에서Dev

iOS에서 다 대다 관계를 설정하려면 어떻게해야합니까? (핵심 데이터)

분류에서Dev

다중 스레드 블록에서 핵심 데이터 NSRangeException 크래시

분류에서Dev

핵심 데이터에서 일대 다 관계를 처리하는 방법

분류에서Dev

iOS 핵심 데이터에서 재귀 적으로 계산 된 속성에 대한 메모리 의미

분류에서Dev

Data sqlite에서 핵심 데이터로 데이터를 미리로드 할 수 없습니다.

분류에서Dev

핵심 데이터-대다 관계에서 개체 순서

분류에서Dev

핵심 데이터 버전 관리, 항상 이전 버전로드

분류에서Dev

iOS 핵심 데이터 다른 엔티티에서 단일 엔티티에 액세스하는 방법

분류에서Dev

iOS-내 앱에서 핵심 데이터를 사용하는시기에 대해 혼란 스러움

분류에서Dev

UITableViews에서 핵심 데이터 관계 및 / 또는 NSPredicate 정렬

분류에서Dev

핵심 데이터에서 관련 항목 정렬

분류에서Dev

다 대다 관계에서 핵심 데이터 검색

Related 관련 기사

  1. 1

    iOS 핵심 데이터-엔티티에 관련 데이터 추가

  2. 2

    핵심 데이터 다 대다 관계에서 중복 레코드 허용

  3. 3

    Xcode는 "핵심 데이터"레코드를 관리합니다.

  4. 4

    계층 관계를 통해 핵심 데이터에 액세스

  5. 5

    iOS 7의 핵심 데이터를 사용하여 이미지 다운로드

  6. 6

    iOS 7의 핵심 데이터를 사용하여 이미지 다운로드

  7. 7

    .xcdatamodel의 핵심 데이터에서 다 대다 관계를 만드는 방법

  8. 8

    핵심 데이터에 plist로드

  9. 9

    iOS 핵심 데이터-비 선택에서 선택으로 관계 변경을위한 경량 마이그레이션

  10. 10

    IOS 기존 핵심 데이터에 더 많은 관계를 추가 한 후 핵심 데이터를 활용하는 방법

  11. 11

    iOS : JSON에서 핵심 데이터 DB 업데이트

  12. 12

    iOS, 핵심 데이터. 다중 스레드 사용시 매우 느림

  13. 13

    iOS Swift 앱의 핵심 데이터에서 이상한 동작

  14. 14

    iOS-앱 삭제 및 백그라운드에서 핵심 데이터 업데이트 (목표 C)

  15. 15

    iOS 핵심 데이터 "낙관적 잠금 실패"

  16. 16

    iOS 핵심 데이터 일대 다 관계

  17. 17

    iOS : 핵심 데이터, Auto ID와의 관계 수

  18. 18

    iOS에서 다 대다 관계를 설정하려면 어떻게해야합니까? (핵심 데이터)

  19. 19

    다중 스레드 블록에서 핵심 데이터 NSRangeException 크래시

  20. 20

    핵심 데이터에서 일대 다 관계를 처리하는 방법

  21. 21

    iOS 핵심 데이터에서 재귀 적으로 계산 된 속성에 대한 메모리 의미

  22. 22

    Data sqlite에서 핵심 데이터로 데이터를 미리로드 할 수 없습니다.

  23. 23

    핵심 데이터-대다 관계에서 개체 순서

  24. 24

    핵심 데이터 버전 관리, 항상 이전 버전로드

  25. 25

    iOS 핵심 데이터 다른 엔티티에서 단일 엔티티에 액세스하는 방법

  26. 26

    iOS-내 앱에서 핵심 데이터를 사용하는시기에 대해 혼란 스러움

  27. 27

    UITableViews에서 핵심 데이터 관계 및 / 또는 NSPredicate 정렬

  28. 28

    핵심 데이터에서 관련 항목 정렬

  29. 29

    다 대다 관계에서 핵심 데이터 검색

뜨겁다태그

보관