2015-10-11 56 views
2

我想將支持iOS 9中引入的新的3D Touch快速操作添加到我的iOS 8應用程序。我知道我需要使用弱鏈接的方法,但問題是我不知道爲應用程序委託方法執行此操作的正確語法。如何弱化iOS應用程序委託方法的鏈接?

爲了處理快速操作,我的應用程序委託需要實現新的application:performActionForShortcutItem:completionHandler:方法,但是以弱連接的方式執行此操作的語法是什麼,它不會在iOS 8上崩潰?我得到了這個:

// iOS 9 only... 
if ([UIApplicationDelegate instancesRespondToSelector: 
    @selector(application:performActionForShortcutItem:completionHandler:)]) { 

    // How do I access the method's shortcutItem and completionHandler arguments from here? 
} 

正如你可以看到我使用Objective-C而不是Swift。

+0

您不需要爲該方法做任何特殊的事情。只需實現它,在iOS 8系統將不會調用它;你的代碼甚至不會運行。它什麼都不會做。如果你實現了' - (void)appleDontEverCallThis {NSAssert(NO,@「」); '也是。對於可能存在或可能不存在的整個_classes_,您只需要弱鏈接。 –

+0

@JoshCaswell非常好,謝謝!如果你添加你的評論作爲答案,那麼我會接受它。 –

回答

2

像這樣的個別方法並不真正受到弱鏈接的影響;由於ObjC的運行時調度方法,respondsToSelector:(或instancesRespondToSelector:)是測試您可以在發送消息之前發送它的正確方法。弱連接僅適用於整個類(和C函數)。

在這種情況下,對於像框架調用的任何方法,它不會在iOS 9以前的任何東西上調用。如果實現該方法,您的代碼將永遠不會運行,所以它永遠不會造成問題。在您的應用程序委託中,您同樣可以實現- (void)applicationWillDrunkDialYourEx:(UIApplication *)application,除了二進制大小略有增加之外,沒有任何後果。

所以你可以繼續前進並實施它。