2015-06-17 51 views
0

我嘗試從Azure獲取一些數據,所有工作都正常。 我的問題是在表格視圖中填充數據。iOS Azure移動服務完成方法

這裏是我的TableViewController(只有重要)的Implementaion:

@interface tableview() 

@property (strong, nonatomic) AzureService *ClientService; 

@end 

@implementation overview 

@synthesize tableViewObject,tabledata,ClientService; 

- (void)viewDidLoad { 

    [super viewDidLoad]; 

    [self.tableViewObject setDelegate:self]; 
    [self.tableViewObject setDataSource:self];  

    self.ClientService = [[AzureService alloc]init]; 

    [self.ClientService DatamyWay:^ 
    { 
     [self.tableViewObject reloadData]; 
     NSLog(@"Reload Table after complete Request"); 
    }]; 


} 

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{ 

    return [self.ClientService.loadedItems count]; 
} 

@end 

Here's方法的實現形式的服務

- (void) DatamyWay:(completionBlock)completion 
{ 
    [self.table readWithCompletion:^(MSQueryResult *result, NSError *error) { 
     if(error) { // error is nil if no error occured 
      NSLog(@"ERROR %@", error); 
     } else { 

      [self.loadedItems addObjectsFromArray:result.items]; 

      for(NSDictionary *item in result.items) { // items is NSArray of records that match query 
       NSLog(@"Location Name: %@", [item objectForKey:@"name"]); 
      } 


     } 
    }]; 

    dispatch_async(dispatch_get_main_queue(), ^{ 
     completion(); 
    }); 
} 

這裏的調試器輸出

2015-06-17 22:24:02.848 type2[3041:301640] Reload Table after complete Request 
2015-06-17 22:24:03.601 type2[3041:301640] Location Name: abc 
2015-06-17 22:24:03.601 type2[3041:301640] Location Name: def 
2015-06-17 22:24:03.602 type2[3041:301640] Location Name: ghj 
2015-06-17 22:24:03.602 type2[3041:301640] Location Name: klm 

所以我已經打電話是異步的。我想檢查什麼時候完成代碼被調用。所以我決定寫「重新加載」NS日誌消息。正如您在調試器輸出中所看到的,來自Completion塊的NSlog消息在Service Method中的NSlog消息之前寫入。所以在RowSection中的數字不會計數,也不會發生任何事情。我希望問題描述清楚。

Regards

+0

我想我應該使用appdelegate方法來設置相同的屬性。我明天試試這個。 – Marcus

+0

doesent工作保存結果在appdelegate在完成塊中捕獲此..... – Marcus

回答

0

我知道,我不應該發表我自己的回答。我希望有人能幫助這個。

將完成塊放在請求中。 代碼,在我的服務實施

- (void) DatamyWay:(completionBlock)completion 
{ 
    AppDelegate *delegate = [[UIApplication sharedApplication] delegate]; 

    [self.table readWithCompletion:^(MSQueryResult *result, NSError *error) { 
     if(error) { // error is nil if no error occured 
      NSLog(@"ERROR %@", error); 
     } else { 


      [delegate.loadedItems addObjectsFromArray:result.items]; 

      for(NSDictionary *item in result.items) { // items is NSArray of records that match query 
       NSLog(@"Location Name: %@", [item objectForKey:@"name"]); 
      } 

      completion(); 


     } 
    }]; 
}