完成另一种方法后执行方法的问题 - iOS

时间:2016-01-04 04:55:01

标签: ios objective-c

我有两个方法,如loadTopicPostsFromDB和loadTopicPosts。在loadTopicPostsFromDB方法中,我正在更新名为strLastTimeStamp的全局NSString的值,该值应该在loadTopicPosts中使用。因此,我想首先执行loadTopicPostsFromDB并在完成后(全局字符串更新)我想执行loadTopicPosts方法。 这就是我做到的。但是,目前loadTopicPosts方法在更新全局strLastTimeStamp之前执行,所以我总是得到一个错误的strLastTimeStamp。

dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
        dispatch_group_t group = dispatch_group_create();

        dispatch_group_async(group, queue, ^{
            [self performSelectorOnMainThread:@selector(loadTopicPostsFromDB) withObject:nil waitUntilDone:NO];
        });

        dispatch_group_notify(group, queue, ^{
            NSLog(@"LoadDBCompleted");

            [self loadTopicPosts];
        });

我怎么能这样做,请告诉我这个实施中的错误。

2 个答案:

答案 0 :(得分:0)

performSelectorOnMainThread:iOS将任务放入队列后立即完成。当调用返回时,选择器很可能甚至没有开始运行。实际上,你根本不应该使用performSelectorOnMainThread - 这个功能在Swift中是不可用的,这是有充分理由的。解决方案更容易(自己解决问题):

dispatch_async (dispatch_get_main_queue (), ^{ 
    [self loadTopicsFromDB];
    [self loadTopicPosts];
});

您可能希望在后台线程上执行loadTopicsFromDB。

答案 1 :(得分:0)

当您使用网络连接做某事时,我建议您使用blocks来处理呼叫的端点。

在此代码中编写

非常简单
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
    [self loadTopicsFromDB: ^(BOOL success, NSError *error) {
        [self loadTopicPosts];
    }];
});