Ios Swift Xcode 6在测试时给出SIGABRT

Ios Swift Xcode 6在测试时给出SIGABRT,ios,xcode,swift,parse-platform,xctest,Ios,Xcode,Swift,Parse Platform,Xctest,我最近更新到了最新版本的Xcode(6.3),现在无法运行以前正常运行的测试 它抛出包含以下信息的SIGABRT: 无法将类型为“MyApplication.MyPSClass”(0x109d7f410)的值强制转换为“MyApplicationTests.MyPSClass”(0x1197ddec0) MyApplicationTests是测试目标,MyApplication是正常的应用程序目标 MyApplication使用Parse作为后端。此错误是否可能是子类化功能的结果 MyClass

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

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

无法将类型为“MyApplication.MyPSClass”(0x109d7f410)的值强制转换为“MyApplicationTests.MyPSClass”(0x1197ddec0)

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

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

MyClass子类PFObject和PFSubclassing,如解析的子类文档中所指定:

class MyPSClass : PFObject, PFSubclassing { ... }
显示“螺纹1:SIGABRT”的线条为:

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

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()
    }

}

为什么会发生这种情况?我如何修复它?提前谢谢

在这一行发生的事情是:

让myPSInstance=MyPSClass.query().getObjectWithId(“ParseObjectdString”)为!MyPSClass

您正在将MyPSClass强制转换为MyApplicationTests.MyPSClass。您不知道,因为swift使用隐式名称空间(隐藏MyApplicationTests名称空间)。您可以使用:


让myPSInstance=MyPSClass.query().getObjectWithId(“ParseObjectdString”)为!MyApplication.MyPSClass

我已经尝试过了,但是,我得到了一个错误,上面写着“使用未声明的类型‘MyApplication’”。MyApplication不是正确的名称空间,或者可能不可访问?我还尝试添加“导入我的应用程序”,但没有效果。这就产生了错误“模块“MyApplication”中没有类型名称“MyPSClass”。它不是,但将其更改为
公共类MyPSClass:PFObject,PFSubclassing{…}
没有帮助。它仍然尝试将其强制转换为MyApplicationTests.MyPSClass。调用时您仍然需要使用MyApplication.MyPSClass,并且由于它现在是公共的,所以应该可以工作。谢谢!成功了!我不得不在顶部添加
importmyapplication
,并将我想要访问的所有方法和变量公开,这似乎有些过分。这是否意味着类和方法在其各自的目标中被认为是公共的,但在我的测试目标中被认为是私有的?是的,私有方法可以从类本身中访问。您必须公开这些内容,以便您的测试目标可以访问它们。万岁,祝你的应用程序玩得开心!
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()
    }

}