我试图通过Xcode在Cloudkit中存储一些数据,但当我在 Jmeter 板中推送QueryRecords时,显示“此数据库中没有“实体”记录”,但我的“SaveFunction”报告“已成功保存”。我错过什么了吗我被卡住了...感谢您提供的任何帮助!...
1)签约与能力部分:
- 已检查键值存储
- 已检查CloudKit
- 容器iCloud.com.myusername.nameOfTheProject
2)Xcdatamodeld - “实体”包含5个属性,第一个实体有一个默认值
3)AppDelegate部件 - 导入UIKit
- 导入CoreData
[...]
lazy var persistentContainer: NSPersistentCloudKitContainer = {
let container = NSPersistentCloudKitContainer(name: "NameOfContainer")
container.loadPersistentStores(completionHandler: { (storeDescription, error) in
if let error = error as NSError? {
fatalError("Unresolved error \(error), \(error.userInfo)")
}
})
return container
}()
// MARK: - Core Data Saving support
func saveContext () {
let context = persistentContainer.viewContext
if context.hasChanges {
do {
try context.save()
} catch {
let nserror = error as NSError
fatalError("Unresolved error \(nserror), \(nserror.userInfo)")
}
}
}
4)ViewController
- 导入UIKit
- 导入CloudKit
类ViewController:UIViewController {
let myContainer = CKContainer(标识符:“iCloud.com.MyUserName.NameOfTheProject”)
override func viewDidLoad() {
super.viewDidLoad()
let artworkRecord = CKRecord(recordType: "Entity")
artworkRecord["customFieldName"] = "xxxx" as NSString
// Do any additional setup after loading the view.
let privateDatabase = myContainer.privateCloudDatabase
privateDatabase.save(artworkRecord) { (record, error) in
if let error = error {
print(error)
// Insert error handling
return
}
print("Saved successfully")
// Insert successfully saved record code
}
}
}
5)CloudKit Dashboard
- 选择的容器是好容器
- 数据库:Xcode中使用的与我相同ID的私有数据库
- 区域:_DefaultZone
- 显示自定义字段“customFieldName”(“可查询、可搜索、
sortable”)作为xcdatamodeld
- 使用索引类型QUERYABLE创建的“recordName”字段
2条答案
按热度按时间7uzetpgm1#
请检查您的开发帐户和测试设备上的iCloud帐户是否相同。我也有这个问题,当我在测试设备上测试iCloud访问,有一个不同的apple-id然后我的开发apple-id.
就像“选择或创建iCloud帐户以进行开发”一节中的Apple documentation说:“请注意,您的iCloud帐户与Apple Developer帐户不同;但是,您可以为两者使用同一电子邮件地址。这样做可以让您在CloudKit Dashboard中访问iCloud帐户的私人用户数据,这对调试很有帮助。
您正在使用私有数据库,如果您希望查看私有记录,则测试设备必须具有与开发帐户ID相同的apple-id。
亲切的问候,MacUserT
c9qzyr3d2#
我也有同样的问题。原来CoreData不使用区域
_defaultZone
作为私有数据库。相反,它创建了一个名为com.apple.coredata.cloudkit.zone
的程序。将过滤器切换到正确的区域后,我可以查询使用自己的用户创建的所有记录。
我找不到任何关于这个的文档,但如果我发现更多关于它的信息,我会更新答案。