Swift Xcode 6 在测试时给出 SIGABRT

Swift Xcode 6 gives SIGABRT when Testing

我最近更新到 Xcode (6.3) 的最新版本,现在无法 运行 我们的测试,这些测试以前是正常的。

它抛出一个包含以下信息的 SIGABRT:

Could not cast value of type 'MyApplication.MyPSClass' (0x109d7f410) to 'MyApplicationTests.MyPSClass' (0x1197ddec0).

MyApplicationTests 是测试目标,MyApplication 是正常的应用程序目标。

MyApplication 使用 Parse 作为我们的后端。此错误是否可能是子类化功能的结果?

MyClass 将 PFObject 和 PFSubclassing 子类化为 Parse 的子类化文档中指定的子类:

class MyPSClass : PFObject, PFSubclassing { ... }

显示"Thread 1: SIGABRT"的行是:

let myPSInstance = MyPSClass.query().getObjectWithId("ParseObjectIDString") as! MyPSClass

包含此行的测试 Class 文件如下所示:

import UIKit
import XCTest

class MyClassTests: XCTestCase {

    override func setUp() {
        super.setUp()
        //...
    }

    func testInit() {
        let myPSInstance = MyPSClass.query().getObjectWithId("ParseObjectIDString") as! MyPSClass
        //...    
    }

    override func tearDown() {
        super.tearDown()
    }

}

为什么会发生这种情况,我该如何解决?提前致谢!

这一行发生了什么:

let myPSInstance = MyPSClass.query().getObjectWithId("ParseObjectIDString") as! MyPSClass

您正在将 MyPSClass 转换为 MyApplicationTests.MyPSClass。您无法分辨,因为 swift 使用隐式名称空间(隐藏了 MyApplicationTests 名称空间)。您可以使用:

let myPSInstance = MyPSClass.query().getObjectWithId("ParseObjectIDString") as! MyApplication.MyPSClass