2016-08-05 14 views
0

我要建立其在数据库的动态尺寸记录懒加载功能,所以我在下面的方式如何保持队列执行,直到得到在Objective-C Web服务API响应

  1. 最初这样做我取说20条,
  2. 然后我处理一个,两个或任意数量的根据用户的点击次数记录(我不是抱着用户等待完成一些服务电话或未决的任务,因此用户可以用列表做任何事像滚动或点击等)

现在保持一致性我首先再处理的用户记录,在这里,我这样做,因为这是我处理从实际可记录的列表中删除的记录,所以这里的数据库和应用程序方面的记录是不固定的列表获取一些记录。

我做的,现在有以下几种方式:

-(void)viewDidLoad { 
    // Here i fetch first 20 records and then show in UITableView 
    // After user see the list he can click on any button to process that records 
// And i am trying to queue that service call and maintain consistency in records 

} 
-(void)processOneRecord { 
    dispatch_queue_t queue = dispatch_queue_create("com.developer.serialqueue", DISPATCH_QUEUE_SERIAL); 

    dispatch_sync(queue, ^{ 
     // To get further records service call 

     [self getMoreRecordsCompletionBlock:^{ 
      [self ProcessOneRecordServiceCall]; 
     }]; 
    }); 
} 

这里我创建一个方法processOneRecord这就要求每次用户点击按钮对细胞

在processOneRecord方法我创建完成块对于第一次服务呼叫,所以第二次服务呼叫肯定在第一次服务后全部响应。但现在当用户点击另一个单元格上的按钮时,我想等待第一个服务调用,直到第二个服务调用响应返回到应用程序。

+0

你想以串行方式执行api调用吗? –

+0

是的,我想以串行方式执行api调用,这就是为什么我创建串行队列。 –

+0

你想在第一个API响应之后调用第二个API? wa我给你答案。 –

回答

0

感谢您的答复家伙。

我已经实现所需的功能与罗布的答案的帮助下,我已经创建了我写一个NSBlockOperation后来我加入NSOperaiotnQueue一个功能。每当这个函数调用时我欺骗先前添加的操作是否完成,如果是,则添加另一个操作,否则它将等待前一个操作,直到完成。

在下面变量下面的代码片段是全球以我目前的UIViewController也是他们在我的UIViewController的viewDidLoad和其他相应的方法初始化。

Bool    isRecordProcessed, isLoadMoreCallFinihsed; 
NSOperationQueue *operationQueue; 

-(void)callTwoAPIServiceCalls { 

    NSBlockOperation *operation = [NSBlockOperation blockOperationWithBlock:^{ 
     // To get further records first 

     [self getMoreRecordsCompletionBlock:^{ 
      [self ProcessOneRecordServiceCall]; 
     }]; 
    }]; 

    if (operationQueue.operations.count == 0 && isRecordProcessed && isLoadMoreCallFinihsed) { 
     [operationQueue addOperation:operation]; 
    } 
    else { 
     [self performSelector:@selector(callTwoServiceCalls:) withObject:nil afterDelay:0.1]; 
    } 

}