如何解决将 Cloudkit 与 Apple Watch 搭配使用
正如标题所说,我想在 Apple Watch 上使用 Cloudkit 来获取信息并列出我存储在私有字段中的项目的名称。但是,每当我运行代码时,我都会看到一个空白屏幕,我不知道为什么。当我更改容器的标识符时,它会抛出一个错误,提示它无法建立连接,导致我认为有一些连接正在进行但它挂在某处,这是我的项目代码:
此代码的大部分内容来自我找到的指南,但它似乎不适用于 Apple Watch,我不确定为什么,因为似乎几乎没有任何指南或文档。
struct CloudKitHelper {
// MARK: - record types
struct RecordType {
static let Plants = "CD_Plant"
}
// MARK: - errors
enum CloudKitHelperError: Error {
case recordFailure
case recordIDFailure
case castFailure
case cursorFailure
}
static func getRecords(completion: @escaping (Result<ListElement,Error>) -> ()) {
let pred = NSPredicate(value: true)
let sort = NSSortDescriptor(key: "CD_identifier",ascending: false)
let query = CKQuery(recordType: RecordType.Plants,predicate: pred)
query.sortDescriptors = [sort]
let operation = CKQueryOperation(query: query)
operation.desiredKeys = ["CD_identifier"]
operation.resultsLimit = 50
operation.recordFetchedBlock = { record in
DispatchQueue.main.async {
guard let recordID = record["CD_identifier"] as? String else { return }
guard let name = record["CD_name"] as? String else { return }
guard let lastWaterDate = record["CD_lastWateringDate"] as? Date else { return }
guard let lastFertDate = record["CD_lastFertDate"] as? Date else { return }
guard let watering = record["CD_watering"] as? Int64 else { return }
guard let fertilizing = record["CD_fertilize"] as? Int64 else { return }
let listElement = ListElement(recordID: recordID,name: name,lastWaterDate: lastWaterDate,lastFertDate: lastFertDate,watering: watering,fertilizing: fertilizing)
completion(.success(listElement))
}
}
operation.queryCompletionBlock = { (/*cursor*/ _,err) in
DispatchQueue.main.async {
if let err = err {
completion(.failure(err))
return
}
// guard let cursor = cursor else {
// completion(.failure(CloudKitHelperError.cursorFailure))
// return
// }
// print("Cursor: \(String(describing: cursor))")
}
}
CKContainer(identifier: "iCloud.com.base.identifier").privateCloudDatabase.add(operation)
}
}
这是我正在使用的内容视图:
'''
import SwiftUI
struct ContentView: View {
@EnvironmentObject var listElements: ListElements
@State private var newItem = ListElement(name: "",lastWaterDate: Date.distantPast,lastFertDate: Date.distantPast,watering: 0,fertilizing: 0)
@State private var editedItem = ListElement(name: "",fertilizing: 0)
var body: some View {
NavigationView{
VStack{
List(listElements.items) { item in
HStack{
Text("Plant Name: \(item.name)")
}
}
}
.onAppear {
// MARK: - Fetch From Cloudkit
CloudKitHelper.getRecords { (result) in
switch result {
case .success(let newItem):
self.listElements.items.append(newItem)
print("Successfully Fetched Item.")
case .failure(let err):
print(err.localizedDescription)
}
}
}
}
}
}
'''
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。