iPhone Tableview не работает для тестеров Apple - PullRequest
1 голос
/ 26 февраля 2010

Мое приложение было отклонено, так как оно не функционировало при проверке командой iPhone App Review Team. Приложение должно загружать слова в табличное представление, но не делало этого во время проверки. Тем не менее, приложение отлично работает на моем iPhone. Можете ли вы дать мне какие-либо предложения относительно того, почему приложение будет отлично работать на одном iPhone, а не на том iPhone, который использовался в процессе обзора?

Вот технические данные:

  1. Проект был скомпилирован на MacBook Pro с Mac OS X 10.6.2 (10C540)
  2. Версия Xcode 3.2.1. 64-битная среда разработки Xcode: 1613.0. Ядро XCode: 1614.0. Поддержка инструментов: 1591.0
  3. Базовая версия SDK 3.1.3
  4. Уровень оптимизации: самый быстрый, самый маленький [-Os]
  5. Мой iPhone - это 3GS с ОС 3.1.3

Я подозреваю, что метод - (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.

Ваши комментарии будут ОЧЕНЬ высоко оценены!

Ответы [ 2 ]

1 голос
/ 26 февраля 2010

Одна вещь, чтобы рассмотреть. NSUserDefaults.

Когда вы делаете свои тестовые случаи, у вас есть тестовые случаи, где UserDefaults:

  1. Empty.
  2. Поврежденный.

Apple запустит приложение без пользовательских настроек по умолчанию, и, если вы не очищаете их время от времени, на вашем испытательном стенде с симулятором и целевым оборудованием будут сохранены значения по умолчанию.

Если вы не используете NSUserDefaults для хранения данных о состоянии, нам потребуется дополнительная информация.

0 голосов
/ 26 февраля 2010

Помимо запуска clean, как предлагает Стивен (полностью удалите свое приложение с iPhone и переустановите его), основными причинами несоответствующего поведения между устройствами, по-видимому, является память и многопоточность.

Вы заявляете, что используете iPhone 3G S, который имеет значительно больше памяти, чем старые модели iPhone / iPod touch. Если вы можете, протестируйте свое приложение на одном из этих старых устройств самостоятельно или найдите кого-то, кто готов провести бета-тестирование вашего приложения (вы упомянули, что у вас есть рабочая сборка ad-hoc, так что вы в большинстве случаев там) Если вы не можете получить доступ к одному из этих устройств, запустите ваше приложение на своем устройстве с помощью инструмента Memory Monitor (не ObjectAlloc) и наблюдайте за пиковым использованием памяти вашим приложением. Если в любой момент оно превысит 20 МБ, возможно, на старых устройствах отправляются предупреждения о нехватке памяти, которые ваше приложение может обрабатывать неправильно. Вы можете искусственно вызывать предупреждения о нехватке памяти в симуляторе, используя аппаратные средства | Смоделируйте также предупреждение о памяти и посмотрите, что произойдет.

Если вы используете какие-либо фоновые потоки для обработки, они также могут вызвать недетерминированное поведение. IPhone 3G S имеет гораздо более быстрый процессор, чем предыдущие модели iPhone / iPod, поэтому на вашем устройстве все может выполняться в другом порядке, чем у них. Убедитесь, что вы правильно блокируете доступ к общим ресурсам и не выполняете обновления пользовательского интерфейса в фоновом потоке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...