使用restkit在循环中发出请求

时间:2014-04-05 10:12:49

标签: ios objective-c nsmutablearray restkit restkit-0.20

在UITableViewController中,我尝试这样做:

在界面中:

@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

2 个答案:

答案 0 :(得分:3)

很可能self.tickets未初始化。设置:

self.tickets = [NSMutableArray array];

创建控制器时。

除此之外:您的方法ticket:failure:ticket:不是很明确,而且会更好getTicketWithId:success:failure:

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

答案 1 :(得分: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];
}