Проблемы с rootViewController и Home Screen Quick Actions - PullRequest
0 голосов
/ 23 сентября 2019

У меня есть приведенный ниже код Objective-C для запуска моего приложения с помощью быстрых действий на главном экране:

- (void)applyShortcutItem:(UIApplicationShortcutItem *)shortcutItem
{
    ViewController *rootViewController = (ViewController *)[self.window rootViewController];

    NSLog(@"Here %@ - %@", rootViewController, shortcutItem);

    if([shortcutItem.type isEqualToString:@"LaunchMode0"])
    {
        [rootViewController setShortcutAction:LaunchMode0];
    }
    else if([shortcutItem.type isEqualToString:@"LaunchMode1"])
    {
        [rootViewController setShortcutAction:LaunchMode1];
    }
}

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

[rootViewController setShortcutAction:LaunchMode0]; и [rootViewController setShortcutAction:LaunchMode1];

Похоже, что rootViewController не нравится.Технически, первоначальный View Controller - это Navigation Controller, однако приложение запускается на моем главном контроллере представлений (у приложения есть только два представления, главное и страница about).

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

Спасиботак много!

РЕДАКТИРОВАТЬ: в соответствии с просьбой, вот полный NSLog.

2019-09-23 18:18:01.317271-0400 AppName[1719:200993] Here <UINavigationController: 0x108802200> - <UIApplicationShortcutItem: 0x282bd1500; type: Mode1Shortcut, title: Mode 1>
2019-09-23 18:18:01.321819-0400 AppName[1719:200993] -[UINavigationController setShortcutAction:]: unrecognized selector sent to instance 0x108802200
2019-09-23 18:18:01.323462-0400 AppName[1719:200993] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UINavigationController setShortcutAction:]: unrecognized selector sent to instance 0x108802200'
*** First throw call stack:
(0x2045aa98c 0x2037839f8 0x2044c71c8 0x231033220 0x2045b01d4 0x2045b1e6c 0x102c14af0 0x102c148ec 0x230ffdf90 0x2308cc468 0x2308cd150 0x2308cc224 0x2308d0f24 0x230c012b0 0x206f275d8 0x102fecc78 0x102ff0840 0x206f61040 0x206f60cdc 0x206f61294 0x20453c728 0x20453c6a8 0x20453bf90 0x204536ecc 0x2045367c0 0x20673779c 0x231007c38 0x102c076d0 0x203ffa8e0)
libc++abi.dylib: terminating with uncaught exception of type NSException
(lldb) 

1 Ответ

1 голос
/ 24 сентября 2019

Проблема заключается в следующем:

ViewController *rootViewController = (ViewController *)[self.window rootViewController];

Но вы заявили, что контроллер корневого представления является UINavigationController.Вам нужно получить ViewController от контроллера навигации.

UINavigationController *rootViewController = (UINavigationController *)self.window.rootViewController;
ViewController *viewController = (ViewController *)rootViewController.topViewController;

Затем обновите оставшуюся часть кода для работы на viewController.

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