Xcode 13提示NSPersistentCloudKitContainerOptions无databaseScope成员如何解决
Xcode 13 下
NSPersistentCloudKitContainerOptions 缺失 databaseScope 属性报错修复方案 问题原因
这是Xcode 13内置CoreData框架的API声明兼容问题:databaseScope属性本身是iOS 14及以上系统的合法API,Xcode 12的SDK正确暴露了该属性的读写权限,但Xcode 13的SDK默认仅暴露了初始化阶段传入该参数的接口,没有单独暴露属性的setter方法,导致编译报错。
修复方案
方案1:使用带scope参数的初始化方法(官方推荐)
直接在初始化NSPersistentCloudKitContainerOptions时传入数据库scope,完全兼容Xcode 12、Xcode 13编译,且无运行时风险:
let publicOptions = NSPersistentCloudKitContainerOptions( containerIdentifier: containerIdentifier, databaseScope: .public )
该方法最低支持iOS 14系统,和你的项目部署目标完全匹配。
方案2:通过KVC赋值(临时兼容方案)
如果项目内有大量旧写法不想批量修改,可以用KVC强制赋值,属性底层在iOS14+系统中是实际存在的:
let publicOptions = NSPersistentCloudKitContainerOptions(containerIdentifier: containerIdentifier) publicOptions.setValue(CKDatabase.Scope.public, forKey: "databaseScope")
注意:该方案需要严格保证运行环境为iOS14及以上,拼写错误会导致运行时崩溃,不建议长期使用。
补充验证
修改完成后清理Xcode缓存(Command+Shift+K)并重新编译即可,原有逻辑完全不需要调整,功能和Xcode 12上运行时完全一致。
内容的提问来源于stack exchange,提问作者Maxim Volgin
相关产品推荐
相关产品推荐

