iOS:RestKit排队管理对象操作阻止UI线程
我试图通过iOS:RestKit排队管理对象操作阻止UI线程,ios,objective-c,restkit,Ios,Objective C,Restkit,我试图通过RestKit加载对象集合,发现此操作正在阻塞主线程。具体地说,当UIViewController出现在-(void)viewdide出现:(BOOL)动画中时,调用此功能消息。只要正在加载请求,用户就无法与UI交互,必须等待操作完成 我如何指示RestKit异步执行请求(我认为它已经异步)并停止阻塞主线程 -(void)rtrvArtistsByStudio:(ISStudio *)studio { NSLog(@"Retrieving Artists for studio %ld"
RestKit
加载对象集合,发现此操作正在阻塞主线程。具体地说,当UIViewController
出现在-(void)viewdide出现:(BOOL)动画中时,调用此功能代码>消息。只要正在加载请求,用户就无法与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];
}
编辑:
我还应该注意到,restkit
是指向RKObjectManager
实例的指针
RestKit版本为0.20请求肯定是异步发送的。如果按下Xcode UI中的暂停按钮并查看线程,那么在请求期间主线程和后台线程上发生了什么?这应该可以让我们深入了解导致线程阻塞的原因。结果表明,这实际上是我自己的错(当然)。我有一个执行一些转换的UIViewController
类别。在转换过程中,我使用ui应用程序
忽略触摸事件,直到转换完成(0.2s,非常简短)。我完全忘记了这个存在
因为我正在viewdide
中加载一些远程对象,所以在加载完成之前,它仍然忽略触摸事件。删除触摸忽略修复了该问题。您正在运行哪个版本的RestKit?0.20.0,已编辑并添加到原始问题中。结果证明这是我自己的错,RestKit不应受到责备(请参阅我的答案)。无论如何谢谢你!