Тестирование приложения PhoneGap на iPad - проблемы в основном методе - PullRequest
10 голосов
/ 10 августа 2011

Итак, я пытался протестировать приложение PhoneGap , над которым я работал, и у меня были некоторые проблемы с тестом на моем iPad.У меня есть следующий метод main для этого приложения:

//
//  main.m
//  elog
//
//  Created by Ben Potter on 9/08/11.
//  Copyright Arden Anglican School 2011. All rights reserved.
//

#import <UIKit/UIKit.h>

int main(int argc, char *argv[]) {

    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
    int retVal = UIApplicationMain(argc, argv, nil, @"AppDelegate");
    [pool release];
    return retVal;
}

Все работает нормально, пока вы полностью не закроете приложение, а затем снова откроете его, после чего оно зависнет.И я понятия не имею, почему.

Я запускаю ios5 на своем ipad с XCode 4.2

Наконец, это ошибки, которые появляются, спасибо за помощь!

Main method errors Прямая ссылка здесь

Ответы [ 5 ]

19 голосов
/ 10 августа 2011

Ваше приложение использует автоматический подсчет ссылок (который является новым), и Phonegap пока не поддерживает его. Перейдите в настройки сборки вашего проекта и отключите автоматический подсчет ссылок.

9 голосов
/ 06 марта 2012

Вот так я решил ошибку «NSAutoReleasePool» в XCode 4.3 и с PhoneGap 1.5.

  1. Перейдите к «YourApplicationName» в Навигаторе проекта.

  2. Выберите «YourApplicationName» в разделе «Проект».

  3. Перейдите в настройки сборки.

  4. Обязательно переключите «Все» и «В сочетании ".

  5. Найдите раздел" Компилятор Apple LLVM 3.1 - Язык ".

  6. Прокрутите вниз, и вы увидите" Objective-C AutomaticПодсчет ссылок ".

  7. Измените его с Да на Нет.

Попробуйте построить свой проект снова, и у вас все будет хорошо!

1 голос
/ 12 марта 2012

Итак, просто чтобы уточнить зрительно склонные, мне понадобилось несколько минут, чтобы найти правильный вариант, поскольку он упоминается только в комментариях к другому ответу.Мне пришлось найти флаг сборки CLANG_ENABLE_OBJC_ARC и переключить его на NO.Вы найдете его в настройках Build в разделе User-Defined (очень низко для меня):

enter image description here

Я также смог обойти ошибку времени выполнения, зайдя вmain.m и комментируя код установки NSAutoreleasePool следующим образом:

//NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
int retVal = UIApplicationMain(argc, argv, nil, @"AppDelegate");
//[pool release];
return retVal;

Однако я не уверен, какие другие эффекты могут иметь последствия.Кажется, что в настоящее время при работе с PhoneGap, вероятно, лучше придерживаться ручного подсчета ссылок, пока PhoneGap должным образом не поддерживает ARC.

И только для Google ошибка, которая привела меня к этому, была «NSAutoreleasePool недоступен», так какЯ не вижу этого как текст в оригинальном сообщении.

0 голосов
/ 08 ноября 2012

До Cordova 2.1.0 ARC не поддерживается, вы не должны ставить галочку ниже (когда вы все еще создаете свой проект): enter image description here

Однако, это именно тот код, который вам нужен:

#import <UIKit/UIKit.h>

int main(int argc, char *argv[]) {

@autoreleasepool {
    int retVal = UIApplicationMain(argc, argv, nil, @"AppDelegate");
    return retVal;
    }
}

Если вы обновитесь до cordova 2.1.0 в Xcode 4.5.1, вы можете перейти на: редактировать Refactor Выбор между Objective ARC и современным Objective-C синтаксисом. enter image description here

0 голосов
/ 12 марта 2012

Если вы не хотите отключать ARC, следующее исправит ошибки в Xcode 4.2.

AppDelegate.m

  //    self.window = [[[UIWindow alloc] initWithFrame:screenBounds]autorelease];
      self.window = [[UIWindow alloc] initWithFrame:screenBounds];

  //    self.viewController = [[[MainViewController alloc] init] autorelease];
      self.viewController = [[MainViewController alloc] init];

(void) dealloc
{
  //    [super dealloc];
}

main.m

int main(int argc, char *argv[]) {
//   NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
//   int retVal = UIApplicationMain(argc, argv, nil, @"AppDelegate");
//   [pool release];
//   return retVal;
  @autoreleasepool {
    NSLog (@"Programming is fun!");
  }
  return 0;    
}

Отказ от ответственности:

Не уверен, как это повлияет на остальные плагины PhoneGap lib. Однако после внесения этих изменений шаблонный проект PhoneGap запускается на симуляторе, но мгновенно завершается. Это было только отправной точкой.

Лучшая альтернатива:

Я предлагаю вам отключить автоматический подсчет ссылок (ARC) в настройках сборки, пока PhoneGap не поддержит его. В этой теме на форуме PhoneGap указывается, что ARC может поддерживаться в PhoneGap 1.6.

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