【问题标题】:Share extension - beginRequestWithExtensionContext not called共享扩展 - 未调用 beginRequestWithExtensionContext
【发布时间】:2015-07-06 23:14:06
【问题描述】:

我有一个用于具有自定义 UI 的 iOS 应用程序的共享扩展程序。运行扩展程序时,情节提要已加载并且 UI 显示正常,但未调用 beginRequestWithExtensionContext

(简化的)视图控制器代码:

class ShareViewController: UIViewController, NSExtensionRequestHandling {

    // This is called…
    override func viewDidLoad() {
        super.viewDidLoad() 
    }

    // …but this isn't!
    override func beginRequestWithExtensionContext(context: NSExtensionContext) {            
        println("beginRequestWithExtensionContext")
    }
}

NSExtensionAttributes

<dict>
    <key>NSExtensionAttributes</key>
    <dict>
        <key>NSExtensionActivationRule</key>
        <dict>
            <key>NSExtensionActivationSupportsImageWithMaxCount</key>
            <integer>1</integer>
        </dict>
    </dict>
    <key>NSExtensionPointIdentifier</key>
    <string>com.apple.share-services</string>
    <key>NSExtensionMainStoryboard</key>
    <string>Share</string>
</dict>
</plist>

关于为什么beginRequestWithExtensionContext 可能不会被调用的任何想法?

【问题讨论】:

    标签: ios ios8-share-extension


    【解决方案1】:

    好的,经过 2 天的前后对比,我在 SO 上发布问题 30 分钟后发现了它!所以,万一其他人也有同样的问题……

    情节提要有一个UINavigationController 作为它的初始视图控制器,所以beginRequestWithExtensionContext 是当然的,而不是ShareViewController

    我将UINavigationController 子类化以解决问题:

    class ShareNavigationController: UINavigationController, NSExtensionRequestHandling {
    
        override func beginRequestWithExtensionContext(context: NSExtensionContext) {
    
            super.beginRequestWithExtensionContext(context)
    
            (self.topViewController as! ShareViewController).handleContext(context)
        }
    }
    

    【讨论】:

    • 将情节提要作为主界面添加到 Safari Web 扩展时会发生同样的问题。对 beginRequestWithExtensionContext() 的调用消失了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多