【发布时间】:2011-10-16 22:11:09
【问题描述】:
我有一个 iPhone 应用程序,它使用 UITableViewController 在屏幕上显示一个表格。表的数据(以及 App 使用的更多数据)在我的 App Delegate 的 didFinishLaunchingWithOptions: 方法上初始化。
该应用程序在 iOS4 上完美运行。在 iOS5 上,表的数据不会加载。
我检查并发现 didFinishLaunchingWithOptions: 方法现在与显示视图并行调用。因此,在获取表格大小时,我会转到我的 App Delegate,它仍然没有加载表格数据,因此返回“0”。
有没有办法在 iOS 5 中解决这个问题?
这是在我看来首先被调用的方法:
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
PalmsterAppDelegate *appDelegate = (PalmsterAppDelegate *)[[UIApplication sharedApplication] delegate];
NSLog(@"tableView: %i", [appDelegate.listOfItems count]);
return [appDelegate.listOfItems count];
}
调用:[appDelegate.listOfItems count] 返回零。它清楚地表明了事物的顺序是:
didFinishLaunchingWithOptions 被调用(我在方法开始时打印到日志)。
然后tableView 被调用并打印为零。然后didFinishLaunchingWithOptions 完成(我也在方法结束时打印到日志)。
【问题讨论】:
-
您能否显示您的
didFinishLaunchingWithOptions中的代码以及与您的表格加载相关的代码? -
“并行调用”是什么意思?
didFinishLaunchingWithOptions:在主线程上运行,与 UIKit 相关的任何事情(例如视图和视图控制器)都运行,因此它们不能并行运行。 -
当我在:didFinishLaunchingWithOptions 和中执行 NSLOG 时:- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] 委托]; NSLog(@"tableView: %i", [appDelegate.listOfItems count]);返回 [appDelegate.listOfItems 计数];这就是我得到的:1) didFinishLaunchingWithOptions:start, 2) tableView: 0, 3) didFinishLaunchingWithOptions:end
标签: objective-c uitableview ios4 ios5 uiapplicationdelegate