You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

iOS共享扩展加载时控制台出现红色背景提示信息问题咨询

iOS共享扩展控制台红色提示问题解析

问题场景

在iOS中实现共享扩展时,运行以下代码虽能成功提取文本,但控制台会出现带红色背景的提示信息:

class ShareViewController: UIViewController{
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        guard let extensionItem = extensionContext?.inputItems.first as? NSExtensionItem, let itemProvider = extensionItem.attachments?.first else {
            close()
            return
        }
                
        if itemProvider.hasItemConformingToTypeIdentifier("public.plain-text"){
            itemProvider.loadItem( forTypeIdentifier: "public.plain-text" as String, options: nil, completionHandler: { (data, error) in
                if let stringContent = data as? String{
                    DispatchQueue.main.async {
                        print( "found string:\(stringContent)")
                     }
                }
            })
        }
    }
    
    @objc func close() {
        self.extensionContext?.completeRequest(returningItems: [], completionHandler: nil)
    }
}

控制台提示内容:

-[_EXSinkLoadOperator loadItemForTypeIdentifier:completionHandler:expectedValueClass:options:] nil expectedValueClass allowing {(
    NSNumber,
    NSDictionary,
    NSArray,
    NSError,
    NSValue,
    NSDate,
    NSURL,
    _EXItemProviderSandboxedResource,
    UIImage,
    NSUUID,
    NSData,
    NSString
)}

原因分析

这个红色提示属于系统兼容性警告,根源是你调用的loadItem(forTypeIdentifier:options:completionHandler:)是旧版API。在iOS 14及以上的共享扩展环境中,苹果更推荐使用带expectedValueClass参数的重载方法——loadItem(forTypeIdentifier:expectedValueClass:options:completionHandler:)。

旧版API没有明确指定期望的返回值类型,系统会打印允许的返回值类型列表(提示中的各类)来提醒开发者:当前调用存在模糊性,建议迁移到更明确的新API。

解决方法

修改loadItem的调用代码,使用带expectedValueClass参数的重载方法,明确指定期望的返回值类型为NSString.self(Swift中也可直接用String.self),即可消除该提示:

if itemProvider.hasItemConformingToTypeIdentifier("public.plain-text"){
    itemProvider.loadItem(forTypeIdentifier: "public.plain-text",
                          expectedValueClass: NSString.self,
                          options: nil) { (data, error) in
        if let stringContent = data as? String{
            DispatchQueue.main.async {
                print("found string:\(stringContent)")
            }
        }
    }
}

明确指定类型后,系统不再需要输出模糊性警告,功能也能正常运行。


内容的提问来源于stack exchange,提问作者reza23

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 11:32:46