使用NSInternalInconsistencyException获取Parse对象时崩溃没有数据?

时间:2014-11-15 00:22:08

标签: swift parse-platform

我想知道每当我尝试检索某个PFObject时可能导致崩溃的原因。

我创建了一个PFObject子类STKStake,并将该对象从我的iOS项目中保存到服务器。然而

然而,当我尝试获取对象时,我收到如下错误:

  

2014-11-14 15:58:38.947 StakesMockup [429:49445]启动STKStake的查询   2014-11-14 15:58:39.143 StakesMockup [429:49445] *由于未捕获的异常终止应用程序' NSInternalInconsistencyException',原因:' Key" intrinsicID"没有数据。在获取其值之前调用fetchIfNeeded。'   * 第一次抛出调用堆栈:   (0x18753de48 0x197c7c0e4 0x18753dd88 0x1001be698 0x1001c1720 0x10015e02c 0x10015e3b4 0x18742bfcc 0x1001f1818 0x1001f1a94 0x1001f1d10 0x1001b94d4 0x1001b85a8 0x1001b86c0 0x1001cf9f0 0x1002152bc 0x100214d14 0x1008d4e30 0x1008d4df0 0x1008e19a0 0x1008e2f18 0x19849d2e4 0x19849cfa8)   libc ++ abi.dylib:以NSException类型的未捕获异常终止

当我在崩溃时检查callstack时,似乎我的代码调用[PFQuery findObjects:],调用[BFTask(Private) waitForResult:],调用objc_exception_throw

无论我是尝试使用PFQuery.findObjects检索对象还是指定确切的ID,我都会遇到此问题。无论我是否已经注册了我的自定义子类STKStake,或者我是否根本没有注册该类,我只是尝试将数据作为普通的PFObject返回,我得到了它。尽管已经确认数据浏览器中确实填充了intrinsicID密钥,但我得到了这次崩溃。

但是,如果我在OS X上创建一个小样本独立脚本,除了尝试将对象作为PFObject之外什么都没做,我得到此异常。该独立脚本的代码如下

import ParseOSX
Parse.setApplicationId("<appid>", clientKey: "<key>")
let q = PFQuery(className:"STKStake")
println("launching a stake query")
let results  = q.findObjects()
println("results=\(results)")

但我从项目中几乎相同的代码中获取异常:

func refreshFromServer(block:(success:Bool, error:NSError!)->Void)
{
  NSLog("ENTRY: refreshFromServer")

  dispatch_async_to_global { () -> Void in
    let query = PFQuery(className: "STKStake")
    NSLog("launching query for STKStake")
    let results1 = query.findObjects()
    NSLog("this line never executes")
    NSLog("results1=%@",results1)
  }
}

永远不会到达永不执行的行,因为在此之前抛出异常。

FWIW,我的自定义解析子类如下:

class STKSTake:PFObject, PFSubclassing, NSCopying, Trackable {

   class func parseClassName() -> String? { return "STKSTake" }
   override class func load() -> Void {
       superclass()?.load()
       self.registerSubclass()
   }
   @NSManaged var intrinsicID:NSString
   // etc. etc.
}

但是我怀疑我的STKStake类是罪魁祸首,因为正如我所提到的,即使没有注册类,我也会得到错误。此外,我已经能够保存子类的对象没有问题。

所以我不确定我的iOS项目中的调用上下文会导致查询代码如此惊人地崩溃,这在OSX上没有问题。

1 个答案:

答案 0 :(得分:0)

我还没有在Swift上测试子类化(我现在更常见的是后端人)。我想知道NSManaged是否导致初始化程序在NSObject从“无数据”转换为“有数据”状态之前尝试设置一个值,该状态控制属性访问是否抛出。