[__NSPlaceholderArray initWithObjects:count:]:在真实设备

时间:2017-10-04 13:11:22

标签: ios objective-c iphone xcode unit-testing

单元测试无法在错误

的设备上运行
[__NSPlaceholderArray initWithObjects:count:]: attempt to insert nil object from objects[1]

应用程序在未运行单元测试时正常启动,并且单元测试在相同设备类型和操作系统(iPhone 6,iOS 10.3.3)的模拟器中运行正常。

完整堆栈跟踪

* thread #1, queue = 'com.apple.main-thread', stop reason = signal SIGABRT
    frame #0: 0x0000000180c79014 libsystem_kernel.dylib`__pthread_kill + 8
    frame #1: 0x0000000180d43264 libsystem_pthread.dylib`pthread_kill + 112
    frame #2: 0x0000000180bed9c4 libsystem_c.dylib`abort + 140
    frame #3: 0x00000001806b91b0 libc++abi.dylib`abort_message + 132
    frame #4: 0x00000001806d2c04 libc++abi.dylib`default_terminate_handler() + 304
    frame #5: 0x00000001806e0820 libobjc.A.dylib`_objc_terminate() + 124
    frame #6: 0x00000001806cf5d4 libc++abi.dylib`std::__terminate(void (*)()) + 16
    frame #7: 0x00000001806cf1a8 libc++abi.dylib`__cxa_rethrow + 144
    frame #8: 0x00000001806e06f8 libobjc.A.dylib`objc_exception_rethrow + 44
    frame #9: 0x0000000181b5ae10 CoreFoundation`CFRunLoopRunSpecific + 532
    frame #10: 0x0000000187e1afc8 UIKit`-[UIApplication _run] + 652
    frame #11: 0x0000000187e15c9c UIKit`UIApplicationMain + 208
  * frame #12: 0x00000001000d08d0 <AppName>`main(argc=9, argv=0x000000016fd33038) at main.m:16
    frame #13: 0x0000000180b6959c libdyld.dylib`start + 4

启动单元测试时看起来像初始化问题。这些工作之前,但不再是,不知道可能会有什么不同。我已经恢复到以前的版本,我确信测试在哪里运行,我仍然发现同样的问题。它看起来像我的环境中的东西。

我尝试的事情没有效果:

  • 重新安装Xcode(我使用Xcode 8.3.3)
  • 清理项目(甚至清理项目文件夹)
  • 重启设备(带iOS 10.3.3的iPhone 6)
  • 尝试使用其他设备(带iOS 10.3.2的iPhone 6s)
  • 尝试使用较新的Xcode 9.0
  • 从Sierra更新macOS到High Sierra
  • 删除衍生数据文件夹

可能是什么原因?

1 个答案:

答案 0 :(得分:0)

我没有找到根本原因,但是我已经应用this technique来切换AppDelegate用于虚拟加速单元测试,这是我想要做的事情,现在运行时没有崩溃单元测试。

因此,它必须是AppDelegate中的某些内容导致应用程序仅在运行单元测试时崩溃,而不是在正常运行应用程序时崩溃。