在加载Data之前加载ViewController是IOS

时间:2015-10-29 17:59:11

标签: ios objective-c uitableview uiviewcontroller

在我的ViewController中,我从mySQL服务器在线加载我的TableView数据。 当我按下加载ViewController的按钮时,在加载ViewController之前需要一些时间。

虽然我的数据是在viewDidLoad方法之后调用的..

- (void)viewDidLoad {
    [super viewDidLoad];

    MyArray = [[NSMutableArray alloc]initWithCapacity:10];
    MyData = [NSUserDefaults standardUserDefaults];

    MySqlDataBase *mySql = [[MySqlDataBase alloc]init];
    MyArray = [mySql doQueryGetArray:@"SELECT * FROM member" ForDataBaseWithName:@"Estifta"];
    NSLog(@"%@",[[MyArray objectAtIndex:0]objectForKey:@"text"]);
    [_myTabeView reloadData];
}

1 个答案:

答案 0 :(得分:0)

当您的视图加载到内存中时会调用

viewDidLoad,但在视图显示在屏幕上之前。 viewDidLoad中的代码在mainThread(UIThread)上运行,因此减慢了屏幕上视图的显示速度。

作为解决方案,您可以在后台队列上调度长时间运行的部分(使用dispatch_async),然后在主线程上重新加载tableview。

    __weak typeof(self) weakSelf = self;
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
MySqlDataBase *mySql = [[MySqlDataBase alloc]init];        
MyArray = [mySql doQueryGetArray:@"SELECT * FROM member" ForDataBaseWithName:@"Estifta"];
        dispatch_async(dispatch_get_main_queue(), ^{
            [weakSelf.myTabeView reloadData];
        });
    });