String literal usage for Objective-C selectors is deprecated, use '#selector' instead

advertisements

I have the following code:

func setupShortcutItems(launchOptions: [NSObject: AnyObject]?) -> Bool {
    var shouldPerformAdditionalDelegateHandling: Bool = false

    if (UIApplicationShortcutItem.respondsToSelector("new")) {
        self.configDynamicShortcutItems()

        // If a shortcut was launched, display its information and take the appropriate action
        if let shortcutItem: UIApplicationShortcutItem = launchOptions?[UIApplicationLaunchOptionsShortcutItemKey] as? UIApplicationShortcutItem {
            // When the app launched at the first time, this block can not called.
            self.handleShortCutItem(shortcutItem)

            // This will block "performActionForShortcutItem:completionHandler" from being called.
            shouldPerformAdditionalDelegateHandling = false
        } else {
            // normal app launch process without quick action
            self.launchWithoutQuickAction()
        }
    } else {
        // Less than iOS9 or later
        self.launchWithoutQuickAction()
    }

    return shouldPerformAdditionalDelegateHandling
}

I get the following "warning" on UIApplicationShortcutItem.respondsToSelector("new"), which says:

Use of string literal for Objective-c selectors is deprecated, use '#selector' instead

The warning replaces the code automatically with:

UIApplicationShortcutItem.respondsToSelector(#selector(FBSDKAccessToken.new))

However this doesn't compile because new() is unavailabe. What am I supposed to use in this case?


Xcode 7.3 using swift for iOS9.3/watchOS2.2/...

If you previously used this line of code:

NSNotificationCenter.defaultCenter().addObserver(self, selector: "updateResult:", name: "updateResult", object: nil)

you should now use this line of code:

NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(InterfaceController.updateResult(_:)), name: "updateResult", object: nil)

at least this is what Xcode offered me after I changed around a few characters in the code. Seems like it doesn't always offer the correct solution when you are presented with this error.