【发布时间】:2012-01-05 18:12:41
【问题描述】:
我编写了一个应用程序,它为标签栏中的每个视图提供了大约 3 个不同的视图控制器。我在每个视图控制器中调用 applicationDidEnterBackground: 以在点击主页按钮后将所有数据保存在该特定视图中。这在 iPad 模拟器上完美运行,但由于某种原因,它在尝试在 iPhone 模拟器上编辑数据后崩溃。我认为这可能是将 applicationDidEnterBackground: 放在视图控制器中的问题,但如果这是问题,那么它不会在 iPad 模拟器上也崩溃吗?
我知道我应该将 applicationDidEnterBackground 放在应用程序委托中,但我的方法看起来像这样:
- (void)applicationDidEnterBackground:(NSNotification *)notification {
NSMutableArray *array = [[NSMutableArray alloc] init];
[array addObject:firstField.text];
[array addObject:secondField.text];
[array writeToFile:[self dataFilePath] atomically:YES];
}
如果我把它放在 App Delegate 中,它当然不会识别 firstField 或 secondField,因为我没有在头文件中声明它或合成它或任何东西。如果我要在 App Delegate 中声明所有内容,那么我的 nib 文件中的插座将失败,因为每个 File's Owner 的类都是那些特定的视图控制器之一。
applicationDidEnterBackground: 的位置是否甚至不是我的问题,因为它在 iPad 模拟器上运行良好? 此外,它曾经在 iPhone 模拟器上也能正常运行。我改变了所有笔尖上的图像视图的背景,然后这开始发生了。我重新检查了我所有的出路和行为,它们匹配得很好。
编辑:我修好了。原来我有一个额外的字段,我决定添加到 iPad 的笔尖,而不是 iPhone 的笔尖。我虽然会很好,但不是这样。这解释了正在发生的所有怪事。我删除了 iPad 笔尖中的字段,一切正常。菲利普,非常感谢你的帮助,并愿意帮我检查一下,真是太慷慨了。
【问题讨论】:
-
applicationDidEnterBackground 只能在 App Delegate 上调用。您确定在您的视图控制器上调用了这些方法吗?您是从每个控制器上的应用程序委托中专门调用它们吗?在每个上设置断点,看看它们是否在任何一种情况下都被实际调用。
-
谢谢。是的,它们在每个视图控制器中都被调用,这是我能想到的唯一方法,可以在该视图中包含所有插座而不会出现任何错误。 applicationDidEnterBackground 字段在主 App Delegate 中留空。这可能是问题所在,即使它在 iPad 模拟器中运行良好?
-
我很困惑这些方法是如何被调用的,因为它们应该只在应用程序的委托上调用。 developer.apple.com/library/ios/#documentation/uikit/reference/…也许您可以将您的项目压缩后发送到我的电子邮件(在个人资料中),我可以为您查看。
-
@Philippe Sabourin 非常感谢!你是一个救生员,我对你感激不尽。我正在尝试在您的个人资料中找到您的电子邮件地址,但它没有显示在您的简历部分。只是指向您网站的链接。看起来我也不能在这里给你发私信,你能把你的电子邮件扔到关于我的部分吗?这是非常慷慨的,我会更乐意通过贝宝支付你的努力,男人。
-
好的,听起来不错。抱歉,我以为我的电子邮件会显示给所有人。感谢您对此的关注。搞清楚这件事做得很好。我仍然很惊讶这些方法被调用了,也许你已经以某种方式链接了它:)
标签: xcode background simulator