PFUser.query()崩溃强制解包

时间:2015-10-13 13:15:44

标签: parse-platform swift2 crash-reports crashlytics symbolicatecrash

背景

  • 解析1.8.5 iOS SDK
  • Xcode 7.0.1(7A1001)
  • Swift 2

在我的代码中,我将PFUser(命名为MyUser)子类化,并尝试使用MyUser.query()创建查询。它会返回PFQuery?

let query = MyUser.query()
query!.whereKey("username", containedIn: ["a", "b"])
query!.findObjectsInBackgroundWithBlock({ (objects, error) -> Void in
  ...
})

然后我将此提交给App Store Review,并被拒绝4次(花了我4周时间),他们一直在报告应用程序崩溃。这非常令人沮丧。在与Crashlytics核实后,它说下面的行正在提升EXC_BREAKPOINT

query!.whereKey("username", containedIn: ["a", "b"])

来自Apple的崩溃日志表明它是EXC_BREAKPOINT (SIGTRAP),根据TN2151暗示a non-optional type with a nil value。事实上,Apple提供的崩溃日志的符号化版本显示行号为0。

我检查了Parse documentation,返回的PFQuery不是可选的。我想知道实现这种逻辑的最佳做法是什么。

1 个答案:

答案 0 :(得分:0)

我之前没有尝试将PFObject子类化,但在检查文档时,查询方法(PF_NULLABLE PFQuery *)query清楚地返回一个Nullable PFQuery对象,该对象将被Swift视为可选。 (参见here)它还说子类只有在符合PFSubclassing协议的情况下才能调用此方法。

通常,当有可选项时,您确实需要像if let这样的内容来保护自己免受nil的返回。