菜鸟教程小白 发表于 2022-12-12 18:20:08

ios - 为以前版本的应用程序崩溃创建快捷方式


                                            <p><p>我在一个应用程序中创建了一个 <code>shortcutItem</code>,当我在 ios 9.2 中运行时它工作正常。但是当我打开具有 ios 8.1 的应用程序时,它会崩溃。 </p>

<blockquote>
<p>Thread 1:EXC_BAD_ACCESS (code=1, address=0x0)</p>
</blockquote>

<p>如果我在 <code>(launchOption == nil) 返回 YES</code> 之后动态创建 <code>shortcutItem</code> 图标和标题,那么如何创建 <code>shortcutItem</code>那么电话显示 <code>shortcutItems</code> 吗?(因为未调用 <code>createShortcutItem</code> 它不应该显示我的想法。)我可以打开一次 <code>shortcutItem</code>即使在 <code>didFinishLaunchingwithoptions</code> 中没有调用 <code>shortcutItems</code> 和图标,我打开的应用程序也已打开并最小化。</p>

<p>iOS 8.1 在这一行遇到崩溃</p>

<pre><code>shortcutItem = ;
</code></pre>

<p>所以我返回 <code>if launchOptions == nil</code> 来修复崩溃。 </p>

<p>以下是我的应用程序中用于使用快捷方式的代码。它是在我的主应用程序中创建的,因此我稍微修改了名称作为示例。</p>

<p>如何处理早期 iOS(8.0 起)或设备不支持的快捷方式。我希望我的应用同时支持 ios8 和更高版本。</p>

<pre><code>- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
// Override point for customization after application launch.
BOOL shouldPerformAdditionalDelegateHandling = YES;

// Shortcut creation and methods
[ createShortcutItem];

if (launchOptions == nil) {
    return shouldPerformAdditionalDelegateHandling;
}

UIApplicationShortcutItem *shortcutItem;
shortcutItem = ;

if ( shortcutItem != nil ){
    // Open app from shortcut
    self.rootViewCtrl_.shortcutItem_ = shortcutItem;

    [ setMyAppShortcutIs:shortcutItem.type];
    [ setAppLaunchedWithShortcut:YES];

    // This will block &#34;performActionForShortcutItem:completionHandler&#34; from being called.
    shouldPerformAdditionalDelegateHandling = NO;
}
return shouldPerformAdditionalDelegateHandling;
}


- (void) createShortcutItem {
UIApplicationShortcutIcon* firstIcon = ;
UIApplicationShortcutItem* firstItem;
firstItem = [initWithType: firstItemType
                                                 localizedTitle: NSLocalizedString(@&#34;First Item&#34;, nil)
                                              localizedSubtitle: nil
                                                         icon: firstIcon
                                                       userInfo: nil];
//..... creating 2nd 3rd 4th item
.shortcutItems = @;
}
</code></pre>

<p><code>application:performActionForShortcutItem:</code> 方法在每次使用快捷方式打开应用时调用。如果我在它每次调用的方法中创建 <code>shortcutItems(icon, title and type)</code> ,这是否会以任何方式影响打开快捷方式,因为一次又一次地创建项目?</p>

<pre><code>- (void) application:(UIApplication *)application performActionForShortcutItem:(UIApplicationShortcutItem *)shortcutItem completionHandler:(void (^)(BOOL))completionHandler
{
    // Shortcut creation and methods
    [ [ MyAppShortcuts instance ] createShortcutItem ];
    [ handleShortCut:shortcutItem ];   
}
</code></pre></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>您应该在检查快捷方式项目是否可用后放置所有逻辑(iOS 9.1 及更高版本)。对于没有通过点击快捷方式调用的实例,我认为 launchOptions 不是 nil。</p>

<pre><code>- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    // Override point for customization after application launch.
    BOOL shouldPerformAdditionalDelegateHandling = YES;

    //checks if you could user shortcut items. only available in iOS 9.1 onwards
    if (){

      // Shortcut creation and methods
      [ createShortcutItem];

      if (launchOptions){
            // Open app from shortcut
            self.rootViewCtrl_.shortcutItem_ = shortcutItem;
            [ setMyAppShortcutIs:shortcutItem.type];
            [ setAppLaunchedWithShortcut:YES];
            // This will block &#34;performActionForShortcutItem:completionHandler&#34; from being called.
            shouldPerformAdditionalDelegateHandling = NO;
      }

    }
    return shouldPerformAdditionalDelegateHandling;
}
</code></pre></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 为以前版本的应用程序崩溃创建快捷方式,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/34916648/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/34916648/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 为以前版本的应用程序崩溃创建快捷方式