iOS 11共享扩展程序已损坏

问题描述 投票:0回答:1

在iOS 11问世之前,我为社交媒体应用创建了一个共享扩展。它工作得非常好。一旦iOS 11问世,分享扩展就会停止工作。我搜索并调试了扩展,直到找到问题的根源。循环遍历extensionContext.inputItems [0] .attachments中的附件时,没有任何附件具有符合kUTTypeImage的项。所以我的代码都没有从那一点开始运行。我昨天也有另一个奇怪的结果。这是我在didSelectPost函数中的代码的一部分。

    guard let content = extensionContext?.inputItems[0] as? NSExtensionItem else { return }
    guard let contentAttachments = content.attachments as? [NSItemProvider] else { return }

    let skyName = self.textView.text

    for attachment in contentAttachments {
        if attachment.hasItemConformingToTypeIdentifier(imageType) {
            attachment.loadItem(forTypeIdentifier: imageType, options: nil) { (data, error) in

                guard error == nil, let url = data as? NSURL else { return }
                self.imageFromAsset(url: url as URL)
                if !self.selectedType.isEmpty {
                    do {
                        let imageData = try Data(contentsOf: url as URL)
                        self.skyImage = UIImage(data: imageData)

                        self.saveSkyImage()

                        guard let skyOriginalImageURL = self.skyOriginalImageURL else { return }
                        guard let skyImageURL = self.skyImageURL else { return }

                        let newSky = Sky(name: skyName ?? "Another Sky",
                                         type: self.selectedType,
                                         date: self.date,
                                         location: self.location,
                                         picture: CKAsset(fileURL: skyImageURL),
                                         likes: 0, flags: 0,
                                         likedBy: [CKReference](), flaggedBy: [CKReference](),
                                         originalImage: CKReference(record: CKRecord(recordType: "SkyImage"), action: .none))
                        let newSkyImage = SkyImageFullResolution(picture: CKAsset(fileURL: skyOriginalImageURL))
                        self.saveSky(sky: newSky, skyImage: newSkyImage)
                    } catch {
                        print(error.localizedDescription)
                        self.closePostWindow()
                    }
                }
            }
        }
    }

    defer {
        closePostWindow()
    }
ios ios11 ios8-share-extension
1个回答
1
投票

我没有直接回答您的问题,但最近在iOS 11中我解决了显示涉及PDF文件的共享扩展的问题。

我的问题是在附件中找不到我期望的类型标识符。

NSItemProvider具有一个实例属性registeredTypeIdentifiers,用于显示激活扩展时可以找到的类型标识符。

这就是我所做的:1)我使用TRUEPREDICATE作为NSExtensionActivationRule来强制在我感兴趣的上下文中显示我的共享扩展。 2)选择共享扩展程序后,将触发您的扩展程序代码。然后通过循环遍历contentAttachments打印每个附件的所有类型registeredTypeIdentifier。

确定所有标识符后,您就可以找到问题的解决方案。

© www.soinside.com 2019 - 2024. All rights reserved.