iOS-viewDidAppear : delayed when showing a UITableView

标签 ios uitableview viewdidappear

我遇到了一个奇怪的问题。我有一个选项卡栏应用程序,在其中我为每个不同的选项卡使用一个导航 Controller ,每个导航 Controller 都有它自己的 View Controller 来显示一些内容。

当我触摸一个选项卡时,我希望该选项卡随 View 一起立即加载,并在它加载后 (viewDidAppear:) 我希望它在 viewDidAppear: 方法中下载一些数据。

为了测试此功能,我设置了以下方法。我正在使用 NSThread 来模拟执行一些冗长的操作,这些操作应该在加载 View 时在后台完成。然后我为 NSArray *test (nonatomic, retain) 分配一些测试数据并重新加载表。

我正在重新加载表格,因为在 viewDidLoad 方法中我将表格设置为仅包含一个空字符串(这是因为我读到表格是在调用 viewDidAppear: 之前设置的。

- (void)viewDidAppear:(BOOL)animated {

    [super viewDidAppear:animated];

    DLog(@"viewDidAppear running");

    [NSThread sleepForTimeInterval:10];

    NSArray *array = [[NSArray alloc] initWithObjects:@"Test1", @"Test2", @"Test3", @"Test4", @"Test5", @"Test6", nil];
    self.test = array;

    [array release];

    [table reloadData];
}

所以我预期的行为应该是,当触摸这个特定的选项卡时,它应该加载立即,然后在 10 秒后它应该填充来自 viewDidAppear: 方法的表数据。 的行为是,当触摸此选项卡时,它会等待 10 秒,然后显示填充了表数据的 View 。

最佳答案

调用 [NSThread sleepForTimeInterval:10]; 将阻止主线程进行任何更新,因此您看不到任何用户界面更改。如果你想像上面那样延迟重新加载表数据,请检查 NSObject performSelector:withObject:afterDelay: NSObject Class Reference

将 reloadData 和数组设置的代码放在一个方法中,然后通过 performSelector:withObject:afterDelay: 调用它

关于iOS-viewDidAppear : delayed when showing a UITableView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6677703/

相关文章:

iOS:将 View 滚动到 TextView 中的当前光标位置

iphone - 更改 UITableviewcell 中附件类型图标的方法

ios - queryForTable viewDidAppear、viewWillAppear 等不适用于 subview

IOS 错误约束 ViewDidAppear 与 ViewDidLoad

iOS编程: customized buttons in viewDidAppear

ios - UIAlertView 与 UIAlertController - iOS 8 中没有键盘

c# - iOS - 本地身份验证更改失败消息

ios - Xcode 自动执行构建操作

objective-c - 有没有办法将分段表格 View 更改为向下钻取表格 View ?

swift - PFFile 作为 UIImageView