我遇到了一个奇怪的问题。我有一个选项卡栏应用程序,在其中我为每个不同的选项卡使用一个导航 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/