2014-04-05 22 views
0

在一个UITableViewController在循环请求我试着这样做:请使用restkit

在接口:

@property (nonatomic, strong) NSMutableArray *tickets; 

在实施

for(NSString *t in [SharedPreferences getTickets]){ 

    [[TicketListManager sharedManager] ticket:^(Ticket *sc) { 

     [self.tickets addObject:sc]; 
     [self.tableView reloadData]; 

     NSLog(@"ticket %d", self.tickets.count); 
    } failure:^(RKObjectRequestOperation *operation, NSError *error) { 
     NSLog(@"error"); 
    } ticket:ticketId]; 
} 

虽然所有对象都成功地加载(我登录他们),票数总是0,所以我的表不会更新。任何想法为什么对象不保存到数组?我在Xcode中5,iOS7和restkit 0.20.3

回答

3

最有可能self.tickets将不会被初始化。设置:

self.tickets = [NSMutableArray array]; 

当您创建控制器。

另外:您的方法ticket:failure:ticket:不是很清楚,会更好,因为getTicketWithId:success:failure:

另一方面:小心在循环中启动网络连接,因为您可能淹没网络。您可能希望通过编辑http客户端的队列来限制并发连接。

+0

“通过编辑http客户端的队列”怎么做?你真正的答案解决了我的问题。 –

+0

'objectManager.httpClient setMaxConcurrentOperationCount:...' – Wain

0

尝试,这可能是这项工作 -

for(NSString *t in [SharedPreferences getTickets]){ 

     [[TicketListManager sharedManager] ticket:^(Ticket *sc) { 

      [self.tickets addObject:sc]; 
      [self performSelectorOnMainThread:@selector(reloadTableData) withObject:Nil waitUntilDone:TRUE]; 

      NSLog(@"ticket %d", self.tickets.count); 
     } failure:^(RKObjectRequestOperation *operation, NSError *error) { 
      NSLog(@"error"); 
     } ticket:ticketId]; 
    } 

-(void)reloadTableData{ 
    [self.tableView reloadData]; 
} 
+0

不能确定这里调用的是什么,但RestKit默认调用主线程上的完成块。 – Wain