1

我的申请已被拒绝,因为该申请在 iPhone 应用审核小组审核时无法运行。该应用程序应该将单词加载到表格视图中,但在审查期间没有这样做。但是,该应用程序在我的 iPhone 上运行良好。您能否给我一些建议,说明为什么应用程序可以在一部 iPhone 上完美运行,但不能在审核过程中使用的 iPhone 上运行?

以下是技术细节:

  1. 该项目是在运行 Mac OS X 10.6.2 (10C540) 的 MacBook Pro 上编译的
  2. Xcode 版本 3.2.1 64 位 Xcode IDE:1613.0 Xcode 核心:1614.0 工具支持:1591.0
  3. 基础 SDK 版本 3.1.3
  4. 优化级别:最快、最小 [-Os]
  5. 我的 iPhone 是带有 3.1.3 操作系统的 3GS

我怀疑方法 -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 没有被调用。此方法在定义为 @interface WordTableViewController : GenericTableViewController 的委托中,其中 GenericTableViewController 类定义为 @interface GenericTableViewController : UITableViewController 。

我怀疑上述情况是这样,因为在我的开发过程中,调试 iPhone 上的发布版本显示 -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 没有被调用,虽然在同一部 iPhone 上调试调试版本时调用它。经过几天的调查,我解决了这个问题。我通过简单地更改发布配置中的优化级别然后将其更改回其原始值来解决它。这对我来说很奇怪。

对于最近提交的有问题的应用程序,我通过复制正常运行的发布配置来重新创建分发配置。然后,我通过复制该分发配置创建了一个临时配置。现在,该应用程序可以在我的 iPhone 上完美运行,用于发布、调试和临时分发。但是,它在 Apple 中不起作用。

您的评论将不胜感激!

4

2 回答 2

1

需要考虑的一件事。NSUserDefaults。

当你做你的测试用例时,你有测试用例,其中 UserDefaults 是:

  1. 空的。
  2. 已损坏。

Apple 将在没有用户默认值的情况下启动应用程序,如果您不时不清除它们,您的模拟器和目标硬件的测试台将存储默认值。

如果您没有使用 NSUserDefaults 来存储状态数据,我们将需要更多信息。

于 2010-02-26T06:02:58.150 回答
0

除了像 Steven 建议的那样从头开始清理(从 iPhone 中完全删除您的应用程序并重新安装它)之外,设备之间行为不一致的最大原因似乎与内存和线程相关。

您说您使用的是 iPhone 3G S,它的内存比旧款 iPhone / iPod touch 大得多。如果可以的话,您可以自己在这些旧设备之一上测试您的应用程序,或者找一个愿意对您的应用程序进行 Beta 测试的人(您提到有一个工作的临时构建,所以您大部分时间都是这样做的)。如果您无法访问这些设备之一,请使用内存监视器(不是 ObjectAlloc)仪器在您的设备上运行您的应用程序,并观察您的应用程序的内存使用峰值。如果它在任何时候超过 20 MB,它可能会在旧设备上收到低内存警告,您的应用程序可能无法正确处理。您可以使用硬件在模拟器中人为地引发低内存警告 | 模拟内存警告,看看会发生什么。

如果您使用任何后台线程进行处理,它们也可能导致不确定的行为。iPhone 3G S 的处理器比早期型号的 iPhone / iPod touch 快得多,因此您设备上的执行顺序可能与他们的不同。验证您是否正确锁定了对共享资源的访问,并且没有在后台线程上执行 UI 更新。

于 2010-02-26T13:55:07.000 回答