0

백그라운드에서 객체 :구문 분석 JSON 나는이처럼 보이는 JSON 응답 (간체)가

houses: [ 
    { 
     id: "1", 
     color: "red", 
     windows: [ 
      { 
       id: "1", 
       type: "large", 
       numPanes: 3 
      }, 
      { 
       id: "2", 
       type: "small", 
       numPanes: 2 
      }, 
     ], 
     doors: [ 
      { 
       id: "33", 
       size: "large", 
       color: "gray" 
      }, 
      { 
       id: "12", 
       size: "large", 
       color: "blue" 
      }, 
     ], 

    }, 
    { 
     id: "2", 
     color: "purple", 
     windows: [ 
      { 
       id: "6", 
       type: "medium", 
       numPanes: 4 
      }, 
      { 
       id: "8", 
       type: "small", 
       numPanes: 2 
      }, 
     ], 
     doors: [ 
      { 
       id: "38", 
       size: "large", 
       color: "green" 
      }, 
      { 
       id: "42", 
       size: "large", 
       color: "orange" 
      }, 
     ], 

    } 
] 

내가 코어 데이터의 각 집에 저장하고 모두 표시 할 필요를 테이블에 말을 전망. 지금 나는이 같은 일을 해요 : 모든이 코어 데이터의 저장이 메인 스레드를 차단하는 것 같다

- (void)save:(NSManagedObjectContext *)context { 
    if (context == nil) { 
     context = [NSManagedObjectContext MR_contextForCurrentThread]; 
    } 

    [context MR_saveToPersistentStoreWithCompletion:^(BOOL success, NSError* error) { 

    }]; 
} 

문제이며, :

for each house: 
    NSManagedObjectContext* context = [NSManagedObjectContext MR_contextForCurrentThread]; 
    ...set properties of the House entity 
    [house save:context]; 
    for each window 
     NSManagedObjectContext* context = [NSManagedObjectContext MR_contextForCurrentThread]; 
     ...set properties of the Window entity 
     [window save:context]; 
     [house addWindowObject:window]; 
    for each door 
     NSManagedObjectContext* context = [NSManagedObjectContext MR_contextForCurrentThread]; 
     ...set properties of the Door entity 
     [door save:context]; 
     [house addDoorObject:door]; 
    [house save]; 

이 방법을 저장하면 다음과 같다 새 집은 피드에서 읽어 들여 코어 데이터로 처리되고 스크롤 뷰는 고르지 않게됩니다. Time Profiler는 저장 방법을 프로세서 시간이 걸리는 것으로 지적합니다.

MagicalRecord를 사용하고 있지만 필자는 그렇지 않은 경우에도 해당 질문이 적용된다고 생각합니다. 어떻게 메인 스레드를 차단하지 않도록 데이터 처리를 구조화 할 수 있습니까? 우리는 단지의 주 스레드를 차단의 문제를 해결해야 할 몇 가지 수정과 MagicalRecord를 업데이트 한

for (NSDictionary* houseInfo in houses) { 
    House* house = [DataManager houseFromJSON:houseInfo]; 
    [_houseData addObject:house]; 
} 

답변

0

:이 집의 새로운 배치를 얻을 때

주택을 표시하는 뷰 컨트롤러는 다음과 같다 구하다. Have a look.

+1

Magical Record를 사용하지 않는 사용자의 경우 변경 사항을 설명해 주실 수 있습니까? 원래의 질문에 답하는 것이 아니라 지역 사회에 교육적으로 도움이 될 수 있습니다. – Tommy

+0

@casademora에 감사드립니다. MR을 업데이트하면 마술처럼 문제가 해결됩니다. 시도해 볼게. 배경 이슈 나 릴리스 노트의 주 스레드를 차단하는 것에 대해서는 아무 것도 보이지 않습니다. 이전 버전 이었습니까? 또한 어떤 버전을 사용하고 있는지 어떻게 알 수 있습니까? – soleil

+0

@ 토미 그러나 나는 현재 그 문제가 무엇인지 확실하지 않습니다. – casademora