我尝试从Azure获取一些数据,一切正常。 我的问题是在表格视图中填充数据。
这是我对TableViewController的实现(只有重要的):
@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
以下是服务
的方法实现- (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
所以我已经把这个电话叫做异步。我想检查何时调用完成代码。所以我决定编写“Reload”NS Log Message。正如您在Debugger输出中看到的那样,Completion块中的NSlog消息在Service Method中的NSlog消息之前写入。所以numbersinRowSection不能计算,什么都不会发生。我希望能够清楚地描述这个问题。
问候
答案 0 :(得分: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();
}
}];
}