【问题标题】:(lldb) error while retrieving datas from parse in swift(lldb)在快速从解析中检索数据时出错
【发布时间】:2015-01-09 06:39:43
【问题描述】:

我正在使用下面的函数从 swift 中检索数据。但我在“results.objectAtIndex(i) as NSDictionary”行中遇到错误。我不知道什么错误以及为什么会出现该错误?请阅读我的代码并指导我!

  func parse_db() {
        var sto_tit = [String] ()
        var results : NSArray = NSArray()
        var par_object : NSDictionary = NSDictionary()
        var par_query = PFQuery(className: "story")
        par_query.whereKeyExists("story_title")
        par_query.findObjectsInBackgroundWithBlock({(NSArray objects, NSError error) in

           if (error != nil) {
               NSLog("error " + error.localizedDescription)
           } else {                   
               results = NSArray(array: objects)

               for i in 0...results.count {
                   println(i) //This line working

                   par_object = results.objectAtIndex(i) as NSDictionary //Error
                   sto_tit = par_object.objectForKey("story_title") as Array

               }
               NSLog("results %@", sto_tit)
           }
      })
    }

错误如下: 0 (lldb)

{
libswiftCore.dylib`swift_dynamicCastObjCClassUnconditional:
0x10adfc620:  pushq  %rbp
0x10adfc621:  movq   %rsp, %rbp
0x10adfc624:  pushq  %rbx
0x10adfc625:  pushq  %rax
0x10adfc626:  movq   %rsi, %rcx
0x10adfc629:  movq   %rdi, %rbx
0x10adfc62c:  xorl   %eax, %eax
0x10adfc62e:  testq  %rbx, %rbx
0x10adfc631:  je     0x10adfc64c               ;swift_dynamicCastObjCClassUnconditional 
+ 44
0x10adfc633:  movq   0x82756(%rip), %rsi       ; "isKindOfClass:"
0x10adfc63a:  movq   %rbx, %rdi
0x10adfc63d:  movq   %rcx, %rdx
0x10adfc640:  callq  0x10adff1ca               ; symbol stub for: objc_msgSend
0x10adfc645:  testb  %al, %al
0x10adfc647:  movq   %rbx, %rax
0x10adfc64a:  je     0x10adfc653               ; swift_dynamicCastObjCClassUnconditional + 51
0x10adfc64c:  addq   $0x8, %rsp
0x10adfc650:  popq   %rbx
0x10adfc651:  popq   %rbp
0x10adfc652:  retq   
0x10adfc653:  leaq   0xcdc8(%rip), %rax        ; "Swift dynamic cast failed"
0x10adfc65a:  movq   %rax, 0x8ae57(%rip)       ; gCRAnnotations + 8
0x10adfc661:  int3   
0x10adfc662:  nopw   %cs:(%rax,%rax)

}

【问题讨论】:

    标签: swift parse-platform xcode6 nsdictionary


    【解决方案1】:
    findObjectsInBackgroundWithBlock:
    

    返回一个 PFObjects 的 NSArray。所以当你尝试

    var par_object = results.objectAtIndex(i) as NSDictionary
    

    会失败,因为results的第i个对象是PFObject,这样不能转换成NSDictionary。

    但你可以使用

    par_object = results.objectAtIndex(i) as PFObject
    sto_tit = par_object["story_title"] as [String] //Are you sure about that the "story_title" column is an array?
    

    而且你的声明是错误的使用

    var par_object = PFObject(className: "YOUR_CLASS_NAME")
    

    【讨论】:

    • 嗨,Daniel,我已经尝试过了,但我收到了这个警告,“变量‘par_object’推断为‘AnyObject’类型,这可能是意外的”
    • 在将 par_object 转换为 PFObject 后,我​​在同一行中收到相同的错误
    • 我再次更新了我的答案,将列转换为字符串数组。
    • 而当你声明 var par_object : NSDictionary = NSDictionary() 时,这是错误的,它应该是一个PFObject
    • 谢谢你丹尼尔!我明白了。
    猜你喜欢
    • 2017-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-05
    • 2021-10-26
    相关资源
    最近更新 更多