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

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

概述我试图访问CloudKit中的记录值,这里是MyPin,它有一个标题&字幕属性/字段值. 然而,有时记录值为空(这里是副标题)可能会发生,并且当我调用时它在行处崩溃: var tempS: String = Annot["Subtitle"] as! String 因为Annot [“Subtitle”]不存在…… 当我做 println(Annot["Subtitle"]) 它返回零 但如果我这 我试图访问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 inif error == nil { // There is no errorfor 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 Annotpo fp f

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

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

总结

以上是内存溢出为你收集整理的ios – 使用Swift从Cloudkit加载空属性时代码崩溃全部内容,希望文章能够帮你解决ios – 使用Swift从Cloudkit加载空属性时代码崩溃所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1048821.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-25
下一篇 2022-05-25

发表评论

登录后才能评论

评论列表(0条)

保存