【问题标题】:Apple iOS5 and didFinishLaunchingWithOptionsApple iOS5 和 didFinishLaunchingWithOptions
【发布时间】: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


【解决方案1】:

将初始化代码移动到应用委托中的单独方法中,然后从表视图控制器的-viewDidLoad 方法中调用该方法。

确保您只初始化一次,无论您的初始化方法被调用多少次。

【讨论】:

  • 好建议。我已经尝试过了 :-) 它显示了一个空白的白色屏幕......
  • 很奇怪。这应该在大多数情况下都有效。我不得不猜测您在初始化方法中正在做的事情是异步发生的......?我会在您的 viewDidLoad 方法中设置一个断点并执行它...看看您的 NSLogs 与您的初始化相关的情况...尝试找出为什么在初始化完成之前调用 numberOfRowsInSection...是您的 UITableViewController在你的 MainWindow.xib 中?
  • 是的,它是一个 UITableViewController 项目。我在 AppDelegate 中不做任何异步操作。仅使用数据初始化 App 数组。
  • 你在使用 Core Data 吗?我很茫然。
  • 我不使用核心数据。实际上,这是我第一次听说。我只使用数组和 NSArrays 来保存我的信息。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多