然而,有时记录值为空(这里是副标题)可能会发生,并且当我调用时它在行处崩溃:
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加载空属性时代码崩溃所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)