2013-01-07 2 views
1

iOS 앱에서 Core Data DB의 여러 테이블 (엔티티)에 대한 업데이트를 확인하기 위해 앱을로드 할 때 웹 서비스가 시작됩니다. 사용자가 여전히 응용 프로그램iOS 백그라운드에서 업데이트하는 동안 Core Data Entities에 액세스 중입니다.

오전 데 문제와 상호 작용할 수 있도록

나는 백그라운드 스레드에서이 내가 코어 데이터 -에서 액세스 엔티티의 테이블을 포함하는 뷰를로드 할 때하면됩니다 - 배경 업데이트가 완료 될 때까지 앱이 응답하지 않고 지연됩니다.

예를 들어 "작업"테이블을 보려고 터치하는 동안 백그라운드에서 "작업"을 업데이트하는 동안 래그리스 경험을 할 수 있습니까?

나는 MagicalRecord를 사용하고 saveInBackgroundWithBlock 블록에 어떤 도움

[MagicalRecord saveInBackgroundWithBlock:^(NSManagedObjectContext *localContext){  
     //UserTasks 
     if([viewName isEqualToString:[[NSString stringWithFormat:@"UserTask_vw_iSales"] lowercaseString]]) 
     { 
      //returns a UserTask or nil if one does not exist 
      UserTask *oldUserTask = [UserTask doesExist:[record valueForKey:@"JSONData"]]; 

      if(oldUserTask) 
      { 
       NSLog(@"deleting old UserTask"); 

       [UserTask MR_deleteAllMatchingPredicate:[NSPredicate predicateWithFormat:@"userTaskUID == %@", oldUserTask.userTaskUID] inContext:localContext]; 
      } 

      //create new one 
      UserTask *utt = [UserTask MR_createInContext:localContext]; 
      [utt initWithJSONSting:[record valueForKey:@"JSONData"]]; 

      NSLog(@"Creating UserTaskType: %@", utt.userTaskUID); 
     } 
}]; 

덕분에 내 생성/업데이트를 수행하고있다! 나는이 게시물을 따라 쓰는 물건 내가 찾던 동작을 취득 MagicalRecord를 사용하지 않는 결국

+1

NSManagedObjectContext는 어디에 초기화합니까? 고려해야 할 중요한 요소는 초기화 된 동시성 유형입니다. –

+0

@JacobRelkin 내 AppDelegate에서는 다음 줄을 사용하여 메인 NSManagedObjectContext를 초기화합니다.'_ManagedObjectContext = [[NSManagedObjectContext alloc] initWithConcurrencyType : NSMainQueueConcurrencyType :;'그런 다음 MagicalRecord 함수를 사용하여 액세스합니다. – RyanG

+0

블록 내에서'NSManagedObjectContext' 인스턴스가'+ [NSManagedObjectContext MR_defaultContext]'입니까? –

답변