Ответ 1
Ваше приложение использует автоматический подсчет ссылок (что является новым), а Phonegap еще не поддерживает его. Перейдите к настройкам сборки проекта и отключите автоматический подсчет ссылок.
Итак, я пытался протестировать приложение 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
Наконец, это ошибки, которые возникают, спасибо за помощь!
Ваше приложение использует автоматический подсчет ссылок (что является новым), а Phonegap еще не поддерживает его. Перейдите к настройкам сборки проекта и отключите автоматический подсчет ссылок.
Вот как я решил ошибку "NSAutoReleasePool" в XCode 4.3 и PhoneGap 1.5.
Перейдите в "YourApplicationName" в Навигаторе проектов.
Выберите "YourApplicationName" в Project.
Перейдите к настройкам сборки.
Обязательно переключите "Все" и "Комбинировать".
Найдите раздел "Компилятор Apple LLVM 3.1 - Язык".
Прокрутите вниз, и вы найдете "Objective-C Автоматический подсчет ссылок".
Измените его с Yes на No.
Попробуйте снова создать проект, и все будет в порядке!
Итак, чтобы уточнить для визуально-наклонного, мне потребовалось несколько минут, чтобы найти правильный вариант, поскольку он упоминается только в комментариях другого ответа. Мне нужно было найти флаг сборки CLANG_ENABLE_OBJC_ARC
и переключить его на NO
. Вы найдете его в настройках Build в разделе User-Defined (очень для меня):
Мне также удалось преодолеть ошибку времени выполнения, перейдя в main.m
и комментируя установочный код NSAutoreleasePool
следующим образом:
//NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
int retVal = UIApplicationMain(argc, argv, nil, @"AppDelegate");
//[pool release];
return retVal;
Однако я не уверен, какие другие эффекты могут иметь место. Похоже, что в настоящее время, работая с PhoneGap, лучше всего придерживаться ручного подсчета ссылок до тех пор, пока PhoneGap не будет правильно поддерживать ARC.
И только для Google ошибка, которая привела меня сюда, была "NSAutoreleasePool недоступен", поскольку я не вижу это как текст в исходном сообщении.
Если вы не хотите отключать 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.
До кордовы 2.1.0 ARC не поддерживается, вы не должны указывать в поле ниже (когда вы все еще создаете свой проект):
Однако, это точный код, который вам нужен:
#import <UIKit/UIKit.h>
int main(int argc, char *argv[]) {
@autoreleasepool {
int retVal = UIApplicationMain(argc, argv, nil, @"AppDelegate");
return retVal;
}
}
Если вы обновляетесь до кордовы 2.1.0 в Xcode 4.5.1, вы можете перейти к:
редактировать
Refactor
Выбор между Objective ARC и Modern Objective-C синтаксисом.