【问题标题】:[__NSPlaceholderArray initWithObjects:count:]: attempt to insert nil object from objects[1] when running unit tests on real device[__NSPlaceholderArray initWithObjects:count:]:在真实设备上运行单元测试时尝试从 objects[1] 插入 nil 对象
【发布时间】:2017-10-04 13:11:21
【问题描述】:

单元测试无法在出现错误的设备上运行

[__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
  • 将 macOS 从 Sierra 更新到 High Sierra
  • 删除派生数据文件夹

可能是什么原因?

【问题讨论】:

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


    【解决方案1】:

    我还没有找到根本原因,但我已申请 this technique 将 AppDelegate 切换为一个虚拟的以加快单元测试,无论如何我都想这样做,现在运行单元测试时没有崩溃.

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

    【讨论】:

      猜你喜欢
      • 2012-10-30
      • 2013-04-28
      • 2016-05-23
      • 2014-08-27
      • 2014-08-05
      • 2012-08-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多