首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CKRecord获取密钥的值

CKRecord获取密钥的值
EN

Stack Overflow用户
提问于 2015-01-05 01:14:36
回答 1查看 4.1K关注 0票数 4

我试图根据用户的用户名来获取用户的值。我能够让正确的用户使用:

代码语言:javascript
复制
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)
}

然后我就可以通过打电话得到正确的记录:

代码语言:javascript
复制
getByUsername("Username"){(records: [CKRecord]) -> Void in
  var record: CKRecord = records[0]
}

我还可以通过以下方法获得正确的ID

代码语言:javascript
复制
var id: String = record.recordID.recordName

因此,我知道我正在获取正确的记录,但是,当我试图从记录中获取值(如用户的电子邮件)时,将返回nil

代码语言:javascript
复制
var email: String = record.objectForKey("Email") as String

我也试过:

代码语言:javascript
复制
record.valueForKey("Email")
record.valueForKeyPath("Email")

当我打印record.allKeys()时,我得到一个空数组[],当我打印record.allTokens()时,我得到了nil的返回

我是否没有正确地从记录中获取一个值,还是必须查询数据库中我想使用记录ID获得的每个值?根据文献资料的说法:

CKRecord对象是用于获取和保存应用程序数据的键值对的字典。

我假设我不需要查询数据库中我想要得到的每个值,并且这些值在从CKRecord获得时会自动插入到iCloud中。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-01-06 08:09:01

当你省略这句话时:

代码语言:javascript
复制
queryOperation.desiredKeys = ["ID"]

查询将返回所有字段。

您没有收到ID字段可能是因为它是一个系统字段,可以使用

代码语言:javascript
复制
var ID = record.recordID.recordName 
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27772210

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档