2014-04-05 19 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