Приложение вылетает на iPhone при попытке открыть конкретное модальное представление при каждой альтернативной сборке - PullRequest
2 голосов
/ 23 сентября 2010

У меня есть контроллер модального представления, который вызывает другой контроллер модального представления в viewDidLoad на основе условия if.

Странная проблема, с которой я сталкиваюсь, это то, что я впервые компилирую приложение и открываю 1-й модальный режим.Контроллер вида, он работает нормально и продолжает показывать контроллер второго вида.Теперь, если я прекращаю выполнение приложения, перестраиваю и запускаю приложение, оно вылетает (зависает, когда работает только кнопка «Домой»), когда я открываю 1-е модальное представление.

Это ошибка, которую я получаю:

Detected an attempt to call a symbol in system libraries that is not present on the iPhone:
_Unwind_Resume called from function -[NSArray makeObjectsPerformSelector:] in image CoreFoundation.
2010-09-23 20:19:56.526 MySuperDuperApp[6117:207] CoreAnimation: ignoring exception: [<TwitterLogin 0x7484dc0> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key actionButton.

TwitterLogin - это имя второго контроллера модального представления, который не отображается.

Я попытался поместить NSLogs, чтобы проверить, где именно происходит сбой.

    //... part of the method which is called in  
    // viewDidAppear of first modal view controller.
    - (void)login {
    NSLog(@"Begin TwitterBasicVC login");       
    loginPopup = [[TwitterLogin alloc] init];
    loginPopup.oAuth = oAuth;
    loginPopup.viewDelegate = self;
    loginPopup.interfaceDelegate = self;

    // Show Login screen.
    loginPopup.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
    NSLog(@"presenting loginPopup modalView");
    [self presentModalViewController:loginPopup animated:YES];  
    [loginPopup release];
    NSLog(@"End TwitterBasicVC login");

    //... viewDidLoad of second modal view controller.
    - (void)viewDidLoad {
     NSLog(@"Begin TwitterLogin viewDidLoad");
         [super viewDidLoad];
     queue = [[NSOperationQueue alloc] init];
     ...

Напечатано сообщение «представляющий loginPopup modalView», однако сообщение «Начать TwitterLogin viewDidLoad» не напечатано.Я не знаю, почему происходит сбой между представлением модального представления и viewDidLoad.

Более странно то, что это происходит каждый раз, когда я собираю / запускаю приложение.(Я попытался удалить приложение и собрать его, но это все еще происходит)

РЕДАКТИРОВАТЬ: я добавил первые несколько строк метода входа в систему, где twitterLogin назначается на alloc.Я также пытался вызвать метод с помощью executeSelector: withObject: afterDelay со значениями 0,0 и 1,0, и проблема все еще существует.

РЕДАКТИРОВАТЬ 2: я делал чистую сборку каждый раз, когда я пытаюсь установить приложение на iPhone /Симулятор (после удаления приложения с устройства / симулятора).Приложение работает нормально с этим методом.Могу ли я предположить, что загрузка приложения в магазине приложений безопасна?

Любые предложения о том, как мне следует поступить в отладке, очень помогут мне:)

Спасибо

1 Ответ

0 голосов
/ 23 сентября 2010

Полагаю, не рекомендуется отображать два контроллера в одной итерации цикла модально.

Попробуйте представить второй контроллер после некоторой небольшой задержки (используйте блоки на iOS4 + или создайте метод и вызовите его через performSelector:withObject:afterDelay:0.1f).

В любом случае, я не могу объяснить странность этого случая каждый второй раз. Вы случайно переключаете некоторые настройки во время каждого выполнения (например, isLoggedIn = !isLoggedIn; и сохраняете их в NSUserDefaults).

...