加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ios – 使用Swift从Cloudkit加载空属性时代码崩溃

发布时间:2020-12-14 19:19:38 所属栏目:百科 来源:网络整理
导读:我试图访问CloudKit中的记录值,这里是MyPin,它有一个标题字幕属性/字段值. 然而,有时记录值为空(这里是副标题)可能会发生,并且当我调用时它在行处崩溃: var tempS: String = Annot["Subtitle"] as! String 因为Annot [“Subtitle”]不存在…… 当我做 print
我试图访问CloudKit中的记录值,这里是MyPin,它有一个标题&字幕属性/字段值.
然而,有时记录值为空(这里是副标题)可能会发生,并且当我调用时它在行处崩溃:

var tempS: String = Annot["Subtitle"] as! String

因为Annot [“Subtitle”]不存在……

当我做

println(Annot["Subtitle"])

它返回零

但如果我这样做:

if (Annot["Subtitle"] == nil) {
println("just got a nil value")
}

我从不输入if语句:

有人可以帮我识别记录是否有空值?

这是我的代码行:

let container = CKContainer.defaultContainer()        
let publicData = container.publicCloudDatabase        
let query = CKQuery(recordType: "MyPin",predicate: NSPredicate(format: "TRUEPREDICATE",argumentArray: nil))
publicData.performQuery(query,inZoneWithID: nil) { results,error in
if error == nil { // There is no error
for Annot in results {
var tempS: String = Annot["Subtitle"] as! String
}}

解决方法

当你得到Annot [“Subtitle”]它会给你一个CKRecordValue?返回的基类为NSObjectProtocol.所以在你的情况下,该字段确实存在,但它不是一个字符串,所以使用as作为它!字符串会使您的应用崩溃.由于该字段存在,CKRecordValue将不为零.但是该字段的内容为零.打印字段时,它将输出该字段的.description.在你的情况下是零.您可以尝试使用此代码:

if let f = Annot["Subtitle"] {
   print("f = (f) of type (f.dynamicType)")
}

然后在打印行上设置断点,当它停止时,在输出窗口中尝试以下三个语句:

po Annot
po f
p f

在po Annot之后,您应该看到该记录中的内容.包括你的字幕字段. po f不是那么有趣.它只会输出一个内存地址.然而,p f将显示实际类型.如果它是一个字符串你应该看到类似:(__ NSCFConstantString *)$R3 = 0xafdd21e0

附:也许你应该把它称为记录而不是Annot.它是一个局部变量,所以它应该以小写字符开头.它仍然是一个记录而不是Annot.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读