Сбой приложения iPhone (только для iOS4) - PullRequest
7 голосов
/ 21 июля 2010

Приложение iPhone иногда зависает при первом запуске после установки. После этого каждый раз, когда я пытаюсь запустить приложение, оно остается на заставке или даже черном экране, пока в конце концов оно не умрет. Я должен перезагрузить устройство, чтобы приложение работало. После этого все работает нормально каждый раз. Единственное изменение между кодом OS3 и 4 - это свойство UIApplicationExitsOnSuspend, которое заставляет приложение каждый раз перезагружаться, а не приостанавливаться. Любая помощь будет великолепна.

Вот два фрагмента кода:

- (void)applicationDidFinishLaunching:(UIApplication *)application 
{  
    taskListViewController = [[TaskListViewController alloc] initWithNibName:@"TaskListView" bundle:nil];
    taskListViewController.managedObjectContext = self.managedObjectContext;

    [taskListViewController setAppDefaults];

    UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:taskListViewController];
    [taskListViewController release];

    navController.navigationBar.tintColor = [UIColor blackColor];

    [window addSubview:[navController view]];
    [window makeKeyAndVisible];

}

- (void)viewDidLoad 
{
    NSLog(@"viewDidLoad - Start");
    [super viewDidLoad]; 

    NSError *error = nil;
    if(![[self fetchedResultsController] performFetch:&error])
    {
     NSLog(@"Error with initial fetch %@, %@", error, [error userInfo]);
    }

    [activityIndicator startAnimating];

    self.navigationItem.leftBarButtonItem.enabled = NO;
    self.navigationItem.rightBarButtonItem.enabled = NO;
    infoButton.enabled = NO;
    syncButton.enabled = NO;

    taskListTable.userInteractionEnabled = NO;
    taskListTable.allowsSelection = NO;

    checkingRecovery = true;
    [self insertCheck];
}

Другие методы, упомянутые выше:

    [taskListViewController setAppDefaults]
    [self insertCheck];

setAppDefaults - перечисляет через пакет настроек, применяя defaultValues ​​к NSUserDefaults, если они еще не были установлены пользователем в peferences.

insertCheck - выполняет некоторые запросы к БД, чтобы обеспечить целостность файла для аудиозаписей, но в этом случае, поскольку приложение загружается впервые, оно ничего не будет делать.

Обновление:

Я закомментировал дополнительные вызовы методов (два выше), и у меня все еще есть проблема.

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

Спасибо, Sj

Ответы [ 3 ]

1 голос
/ 04 августа 2010

Если вы отлаживаете приложение в случае сбоя, вы должны получить трассировку стека, которая покажет вам, на какой линии происходит сбой приложения.

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

0 голосов
/ 26 июля 2010

Попробуйте это без части managedObjectContext и посмотрите, все ли еще происходит сбой.Что говорит журнал при сбое?Вы получаете исключение памяти?

0 голосов
/ 21 июля 2010

Вы смотрели файлы журнала?

Вы можете скопировать их с iPhone, если подключите его, загрузите органайзер (Windows-> Органайзер в XCode) и выберите журналы устройства.

Если вы видите журнал на момент сбоя вашего приложения, он должен включать стек вызовов (который должен включать функцию, вызывающую сбой)

В качестве альтернативы может оказаться, что вы застряли в каком-то коде, запускаемом при запуске, - и если ваше приложение не запускается своевременно (в течение 30 секунд IIRC), iOS убивает его.

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