Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
iOS:RestKit排队管理对象操作阻止UI线程_Ios_Objective C_Restkit - Fatal编程技术网

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不应受到责备(请参阅我的答案)。无论如何谢谢你!