2013-01-12 3 views
0

RestKit을 통해 객체 모음을로드하려고 시도하는데이 작업으로 메인 스레드가 차단되고 있습니다. 특히, UIViewController 메시지가 -(void)viewDidAppear:(BOOL)animated; 메시지에 나타날 때이 기능이 호출됩니다. 요청이로드되는 동안 사용자는 UI와 상호 작용할 수 없으므로 작업이 완료 될 때까지 기다려야합니다.iOS : RestKit 대기열 관리 객체 작업 차단 UI 스레드

RestKit에서 비동기 적으로 요청을 실행하도록 지시 할 수 있습니까 (이미 생각한 것 같습니다). 메인 스레드를 차단하지 않습니까?

-(void)rtrvArtistsByStudio:(ISStudio *)studio 
{ 
NSLog(@"Retrieving Artists for studio %ld", [studio studioID]); 
NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter]; 

NSDictionary *params = [NSDictionary dictionaryWithObject:[NSString stringWithFormat:@"%ld", [studio studioID]] forKey:@"studioID"]; 

NSURLRequest *request = [restkit requestWithObject:nil method:RKRequestMethodGET path:@"/restAPI/rtrvArtistsByStudio" parameters:params]; 
RKManagedObjectRequestOperation *operation = [restkit managedObjectRequestOperationWithRequest:request managedObjectContext:restkit.managedObjectStore.persistentStoreManagedObjectContext success:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult) { 
    NSArray *artists = [mappingResult array]; 
    [studio setArtists:artists]; 
    [notificationCenter postNotificationName:nStudioLoadedArtists object:studio]; 
} failure:^(RKObjectRequestOperation *operation, NSError *error) { 
    NSLog(@"Failed to load artists for studio %ld due to %@", [studio studioID], error); 
    [notificationCenter postNotificationName:nStudioFailedLoadingArtists object:studio]; 
}]; 
[restkit enqueueObjectRequestOperation:operation]; 
} 

편집 : 나는 또한 restkitRKObjectManager의 인스턴스에 대한 포인터 있음을 알아 두셔야합니다.

RestKit 버전은 요청이 확실히 비동기 적으로 발송되는 0.20

+0

어떤 RestKit 버전을 실행하고 있습니까? – Alex

+0

0.20.0, 편집 및 원래 질문에 추가. – kz3

답변

0

실제로 내 자신의 잘못이라고 밝혀졌습니다 (당연히). 일부 전환을 수행하는 UIViewController 범주가 있습니다. 전이 중에 나는 UIApplication이 전환이 완료 될 때까지 터치 이벤트를 무시했습니다 (0.2 초, 매우 짧음). 나는 이것이 존재한다는 것을 완전히 잊었다.

viewDidAppear에 원격 객체를로드 중이므로 완료 될 때까지 계속 터치 이벤트가 무시되었습니다. 터치를 제거하면 문제가 해결되었습니다.

0

입니다. Xcode UI에서 일시 중지 버튼을 누르고 스레드를 보면 요청 중에 주 스레드와 백그라운드 스레드에서 어떤 현상이 발생합니까? 그러면 스레드가 막히는 원인을 파악할 수 있습니다.

+0

그것이 내 자신의 잘못이었습니다. RestKit은 책임이 없습니다 (내 대답 참조). 어쨌든 고마워! – kz3