我正在使用
NSItemProvider对象上的loadItemForTypeIdentifier:options:completionHandler:方法,可通过iOS 8中的Share扩展程序从Safari中提取url。

在Objective-C中,此代码可以正常工作,并且该块将运行。

[itemProvider loadItemForTypeIdentifier:(@"public.url" options:nil completionHandler:^(NSURL *url, NSError *error) {
    //My code
}];

在Swift中,它看起来非常相似,但是闭包没有运行。另外,itemProvider.hasItemConformingToTypeIdentifier("public.url")返回YES,因此必须有一个有效的对象才能从itemProvider内部解析网址。
itemProvider.loadItemForTypeIdentifier("public.url", options: nil, completionHandler: { (urlItem, error) in
    //My code
})

Info.plist NSExtension部分与Objective-C和Swift版本完全相同,如下所示:
<key>NSExtension</key>
<dict>
    <key>NSExtensionAttributes</key>
    <dict>
        <key>NSExtensionActivationRule</key>
        <dict>
            <key>NSExtensionActivationSupportsWebURLWithMaxCount</key>
            <integer>1</integer>
        </dict>
        <key>NSExtensionPointName</key>
        <string>com.apple.share-services</string>
        <key>NSExtensionPointVersion</key>
        <string>1.0</string>
    </dict>
    <key>NSExtensionPointIdentifier</key>
    <string>com.apple.share-services</string>
    <key>NSExtensionMainStoryboard</key>
    <string>MainInterface</string>
</dict>

我究竟做错了什么?

最佳答案

称呼

self.extensionContext!.completeRequestReturningItems([], completionHandler: nil)

在completeHandler的末尾,而不是在didSelectPost()的末尾调用它

10-08 06:09