class func getByUsername(username: String,callback: (records: [CKRecord]) -> ()){ getSummary(nspredicate(format: "Username == %@",username)){(records: [CKRecord]) -> VoID in callback(records: records) }}class func getSummary(predicate: nspredicate,callback: (records: [CKRecord]) -> ()){ let query = CKquery(recordtype: "UserInfo",predicate: predicate) let queryOperation = CKqueryOperation(query: query) queryOperation.desiredKeys = ["ID"] var records = [CKRecord]() queryOperation.recordFetchedBlock = {record in records.append(record)} queryOperation.queryCompletionBlock = {_ in callback(records: records)} CKContainer.defaultContainer().publiccloudDatabase.addOperation(queryOperation)}
然后我可以通过以下方式获得正确的记录:
getByUsername("Username"){(records: [CKRecord]) -> VoID in var record: CKRecord = records[0]}
我也可以通过使用获得正确的ID
var ID: String = record.recordID.recordname
所以我知道我正在获取正确的记录,但是,当我尝试从记录中获取值时,例如用户的电子邮件,则返回nil:
var email: String = record.objectForKey("Email") as String
我也尝试过:
record.valueForKey("Email")record.valueForKeyPath("Email")
当我打印record.allKeys()时,我得到一个空数组,[],当我打印record.allTokens()时,我得到一个nil的返回
我没有正确地从记录中获取值,或者我是否必须在数据库中查询我希望使用记录ID获取的每个值?基于the documentation所说的:
A CKRecord object is a dictionary of key-value pairs that you use to fetch and save the data of your app.
我假设我不必查询数据库中我想获得的每个值,并且从iCloud获取值时,这些值会自动插入到CKRecord中
解决方法 当你遗漏这条线时:queryOperation.desiredKeys = ["ID"]
查询将返回所有字段.
您没有收到ID字段可能是因为它是一个可以使用的系统字段
var ID = record.recordID.recordname总结
以上是内存溢出为你收集整理的ios – CKRecord获得密钥的价值全部内容,希望文章能够帮你解决ios – CKRecord获得密钥的价值所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)