Приложение IOS работает в 4.3, но вылетает с SIGABRT в main на 5.0 - PullRequest
1 голос
/ 17 октября 2011

Летом я разрабатывал приложение для iOS 4.3 на своем iPhone 4, и все работало хорошо. Я отложил этот проект на задний план, пока переезжал. С выпуском iOS 5 я обновил свой Xcode и iOS SDK до 4.2 и 5.0 соответственно, а также купил новый iPod Touch под управлением 5.0 для разработки.

Мое приложение по-прежнему работает в симуляторе iPhone 4.3 (к сожалению, у меня больше нет возможности тестировать iPhone 4), но оно постоянно падает на симуляторе iPhone 5.0, а также на iPod Touch.

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

-(IBAction) showView:(id) sender{   
    if (self.tViewController == nil) {
        self.tViewController = [[TViewController alloc] init];
    }

    [self.navigationController pushViewController:tViewController animated:YES];
    [UIView beginAnimations:nil context:nil];
    [UIView setAnimationDuration:.75];
    [UIView setAnimationTransition:UIViewAnimationTransitionFlipFromLeft
                         forView:self.view
                         cache:YES];

    [self.view addSubview:tViewController.view];
    [UIView commitAnimations];
}

Когда я иду и достигаю этой строки:

[self.view addSubview:tViewController.view];

Вылетает и переходит на main.m:

int main(int argc, char *argv[])
{
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
    int retVal = UIApplicationMain(argc, argv, nil, nil);
    [pool release];
    return retVal;
}

И показывает 'SIGABRT', получаемый по этой строке:

int retVal = UIApplicationMain(argc, argv, nil, nil);

Я читал, что ошибка возникает из-за того, что что-то было выпущено дважды. Но в моей функции «showView» я не вижу, где я мог бы это сделать. Если только метод addSubview не делает что-то, о чем я не знаю.

Кроме того, почему эта ошибка происходит в 5.0, а не в 4.3?

Любая помощь приветствуется.

1 Ответ

1 голос
/ 17 октября 2011
-(IBAction) showView:(id) sender{   
    if (self.tViewController == nil) {
        self.tViewController = [[TViewController alloc] init];
    }

    [self.navigationController pushViewController:tViewController animated:YES];
    [UIView beginAnimations:nil context:nil];
    [UIView setAnimationDuration:.75];
    [UIView setAnimationTransition:UIViewAnimationTransitionFlipFromLeft
                     forView:self.view
                     cache:YES];

    [self.view addSubview:tViewController.view];
    [UIView commitAnimations];
}

Вы уже выдвинули это представление, используя [self.navigationController pushViewController:tViewController animated:YES], тогда почему вы добавляете его в главное представление, используя [self.view addSubview:tViewController.view], удалите эту строку кода.

...