在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 11中我解决了显示涉及PDF文件的共享扩展的问题。
我的问题是在附件中找不到我期望的类型标识符。
NSItemProvider具有一个实例属性registeredTypeIdentifiers,用于显示激活扩展时可以找到的类型标识符。
这就是我所做的:1)我使用TRUEPREDICATE作为NSExtensionActivationRule来强制在我感兴趣的上下文中显示我的共享扩展。 2)选择共享扩展程序后,将触发您的扩展程序代码。然后通过循环遍历contentAttachments打印每个附件的所有类型registeredTypeIdentifier。
确定所有标识符后,您就可以找到问题的解决方案。