Я создал shortcutItem
в приложении, и когда я запустил ios 9.2, он отлично работает. Но когда я открываю приложение с ios 8.1, он падает.Создание ярлыка для приложения сбой в предыдущей версии
Тема 1: EXC_BAD_ACCESS (код = 1, адрес = 0x0)
Как это shortcutItem
создаются говорят, что если я создаю shortcutItem
значок и название динамически после (launchOption == nil) return YES
показывает ли телефон shortcutItems
то (? потому что createShortcutItem
не называется, он не должен показывать то, что я думаю.) Смогу ли я открыть shortcutItem
после того, как я открыл приложение, открывается и сведено к минимуму, хотя shortcutItems
и значки не вызывают в didFinishLaunchingwithoptions
.
Am получать сбои в ИО 8.1 на этой линии
shortcutItem = [launchOptions objectForKeyedSubscript:UIApplicationLaunchOptionsShortcutItemKey];
Так я возвращаюсь if launchOptions == nil
, чтобы зафиксировать аварию.
Ниже приведен код, который используется в моем приложении для использования ярлыка. Он создан в моем основном приложении, поэтому я немного изменил имена в качестве примера.
Как обрабатывать ярлык, который не поддерживается на ранней версии iOS (от 8.0) или устройств. Я хочу, чтобы мое приложение поддерживало как ios8, так и более большие версии.
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
// Override point for customization after application launch.
BOOL shouldPerformAdditionalDelegateHandling = YES;
// Shortcut creation and methods
[[MyAppShortcuts instance] createShortcutItem];
if (launchOptions == nil) {
return shouldPerformAdditionalDelegateHandling;
}
UIApplicationShortcutItem *shortcutItem;
shortcutItem = [launchOptions objectForKeyedSubscript:UIApplicationLaunchOptionsShortcutItemKey];
if (shortcutItem != nil){
// Open app from shortcut
self.rootViewCtrl_.shortcutItem_ = shortcutItem;
[[MyAppShortcuts instance] setMyAppShortcutIs:shortcutItem.type];
[[MyAppShortcuts instance] setAppLaunchedWithShortcut:YES];
// This will block "performActionForShortcutItem:completionHandler" from being called.
shouldPerformAdditionalDelegateHandling = NO;
}
return shouldPerformAdditionalDelegateHandling;
}
- (void) createShortcutItem {
UIApplicationShortcutIcon* firstIcon = [UIApplicationShortcutIcon iconWithTemplateImageName:@"shortcutFirstItem"];
UIApplicationShortcutItem* firstItem;
firstItem = [[UIApplicationShortcutItem alloc]initWithType: firstItemType
localizedTitle: NSLocalizedString(@"First Item", nil)
localizedSubtitle: nil
icon: firstIcon
userInfo: nil];
//..... creating 2nd 3rd 4th item
[UIApplication sharedApplication].shortcutItems = @[firstItem, secondItem, thirdItem, fourthItem];
}
application:performActionForShortcutItem:
метод вызывается каждый раз, когда приложение открывается с помощью ярлыка. Если я создаю shortcutItems(icon, title and type)
внутри метода, который он вызывает каждый раз, это влияет на открытие ярлыка каким-либо образом, потому что создание элементов снова и снова?
- (void) application:(UIApplication *)application performActionForShortcutItem:(UIApplicationShortcutItem *)shortcutItem completionHandler:(void (^)(BOOL))completionHandler
{
// Shortcut creation and methods
[ [ MyAppShortcuts instance ] createShortcutItem ];
[[FinAppShortcuts instance] handleShortCut:shortcutItem ];
}
Что именно представляет собой сообщение при его сбое? И почему вы вызываете 'objectForKeyedSubscript:' и не обычный 'objectForKey:'? –
Crash is «Thread 1: EXC_BAD_ACCESS (code = 1, address = 0x0)» выделено красным цветом – Jaff