performQuery,无法将 inZoneWithID 设置为 nil
performQuery, cannot set inZoneWithID to nil
您好,我正在尝试制作一个小功能,该功能应通过输入 his/her 名称将与用户对应的记录发回给我。我创建了一个 swift 文件:
import Foundation
import CloudKit
import UIKit
func getGetMainUser(name : String) -> CKRecord {
var myRecord : CKRecord!
let container = CKContainer.defaultContainer()
let publicDB = container.publicCloudDatabase
let predicate = NSPredicate(format: "nickName == name")
let query = CKQuery(recordType: "usersAtributes", predicate: predicate)
publicDB.performQuery(query, inZoneWithID: nil) {
record, error in {
if error != nil {
println(error.localizedDescription)
} else {
if record.count == 1 {
myRecord = record[0] as CKRecord
}
}
}
}
return myRecord
}
我不明白的是,由于 performQuery 的 inZoneWithID 值为 nil,我无法编译这段代码。尽管此语法适用于我代码的其他部分,但它可能不正确。
这是我得到的错误:
Cannot convert the expression's type '(CKQuery!, inZoneWithID: NilLiteralConvertible, ((ST5,(ST5,ST6) -> (ST5, ST6) -> ST4) -> (ST5,(ST5,ST6)-> ST4) -> ST4,((ST5,ST6) -> (ST5,ST6)...
你的问题不是zoneID。文档是这样说的:
The ID of the zone to search. Search results are limited to records in
the specified zone. Specify nil to search the default zone of the
database.
是谓词错了。应该是:
NSPredicate(格式: "nickName = %@", 名称)
还有一件事,performQuery 将异步执行。因此,您在尚未设置 myRecord 时返回它。您有 2 个选择。
- 您可以使用信号量使此方法同步。
- 您可以在传递代码块时调用该方法,而不是返回值。然后用该记录调用该代码块。
选项 2 是首选方法。选项 1 将在 CloudKit 调用期间锁定您的应用程序。
好的,我终于找到了我的(新手)错误:
我在导致错误的位置添加了两个 extra/useless 括号。
后立即开始
record, error in
并在
之前关闭
return myRecord
现在我已经删除了它们,一切都很好。谢谢 Edwin,现在代码已编译,您的有用答案将对我有很大帮助。
您好,我正在尝试制作一个小功能,该功能应通过输入 his/her 名称将与用户对应的记录发回给我。我创建了一个 swift 文件:
import Foundation
import CloudKit
import UIKit
func getGetMainUser(name : String) -> CKRecord {
var myRecord : CKRecord!
let container = CKContainer.defaultContainer()
let publicDB = container.publicCloudDatabase
let predicate = NSPredicate(format: "nickName == name")
let query = CKQuery(recordType: "usersAtributes", predicate: predicate)
publicDB.performQuery(query, inZoneWithID: nil) {
record, error in {
if error != nil {
println(error.localizedDescription)
} else {
if record.count == 1 {
myRecord = record[0] as CKRecord
}
}
}
}
return myRecord
}
我不明白的是,由于 performQuery 的 inZoneWithID 值为 nil,我无法编译这段代码。尽管此语法适用于我代码的其他部分,但它可能不正确。 这是我得到的错误:
Cannot convert the expression's type '(CKQuery!, inZoneWithID: NilLiteralConvertible, ((ST5,(ST5,ST6) -> (ST5, ST6) -> ST4) -> (ST5,(ST5,ST6)-> ST4) -> ST4,((ST5,ST6) -> (ST5,ST6)...
你的问题不是zoneID。文档是这样说的:
The ID of the zone to search. Search results are limited to records in the specified zone. Specify nil to search the default zone of the database.
是谓词错了。应该是:
NSPredicate(格式: "nickName = %@", 名称)
还有一件事,performQuery 将异步执行。因此,您在尚未设置 myRecord 时返回它。您有 2 个选择。
- 您可以使用信号量使此方法同步。
- 您可以在传递代码块时调用该方法,而不是返回值。然后用该记录调用该代码块。
选项 2 是首选方法。选项 1 将在 CloudKit 调用期间锁定您的应用程序。
好的,我终于找到了我的(新手)错误: 我在导致错误的位置添加了两个 extra/useless 括号。
后立即开始record, error in
并在
之前关闭return myRecord
现在我已经删除了它们,一切都很好。谢谢 Edwin,现在代码已编译,您的有用答案将对我有很大帮助。