iOS Azure移动服务完成方法

时间:2015-06-17 20:43:32

标签: ios objective-c azure

我尝试从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不能计算,什么都不会发生。我希望能够清楚地描述这个问题。

问候

1 个答案:

答案 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();


        }
    }];
}