- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我在 Swift 中使用 Codable
和 NSKeyedArchiver
和 NSKeyedUnarchiver
来编码/解码对象。
当编码对象与预期格式匹配时,一切都会很好。但是,如果数据无效或格式不匹配,我将在使用 XCTest
的单元测试中得到以下断言:
failed: caught "NSInvalidUnarchiveOperationException", "The data couldn’t be read because it isn’t in the correct format."
我正在使用 NSKeyedUnarchiver.decodeTopLevelDecodable
方法,which is supposed to throw an exception解码失败时:
If the archive is not a valid property list, this method throws the
DecodingError.dataCorrupted(_:)
error. If a value within the archive fails to decode, this method throws the corresponding error.
我无法捕获此异常,因为 try?
、do/catch
和 XCTAssertThrowsError
似乎都不起作用。
测试失败时的完整错误信息:
failed: caught "NSInvalidUnarchiveOperationException", "The data couldn’t be read because it isn’t in the correct format."
(
0 CoreFoundation 0x00007fff315f12db __exceptionPreprocess + 171
1 libobjc.A.dylib 0x00007fff587a1c76 objc_exception_throw + 48
2 Foundation 0x00007fff3376b077 -[NSCoder(Exceptions) __failWithExceptionName:errorCode:format:] + 0
3 Foundation 0x00007fff3376b371 -[NSCoder(Exceptions) __failWithExternalError:] + 161
4 libswiftFoundation.dylib 0x0000000109872453 _T0So17NSKeyedUnarchiverC10FoundationE23decodeTopLevelDecodablexSgxm_SS6forKeytKs0G0RzlF + 403
5 MBOUtilityKit 0x0000000104cba964 _T013MBOUtilityKit17KeyedLocalStorageV3getxSS3key_tKs9DecodableRzs9EncodableRzlF + 772
6 MBOUtilityKitTests macOS 0x0000000104c5144c _T024MBOUtilityKitTests_macOS017KeyedLocalStorageC0C17testDecodeFailureyyKF + 556
7 MBOUtilityKitTests macOS 0x0000000104c51835 _T024MBOUtilityKitTests_macOS017KeyedLocalStorageC0C17testDecodeFailureyyKFTo + 69
8 CoreFoundation 0x00007fff31568bec __invoking___ + 140
9 CoreFoundation 0x00007fff31568ac0 -[NSInvocation invoke] + 320
10 XCTest 0x000000010036c90d __24-[XCTestCase invokeTest]_block_invoke_2.187 + 65
11 XCTest 0x00000001003d6207 -[XCTMemoryChecker _assertInvalidObjectsDeallocatedAfterScope:] + 51
12 XCTest 0x00000001003755ef -[XCTestCase assertInvalidObjectsDeallocatedAfterScope:] + 116
13 XCTest 0x000000010036c89c __24-[XCTestCase invokeTest]_block_invoke.181 + 210
14 XCTest 0x00000001003c8772 +[XCTestCase(Failures) performFailableBlock:shouldInterruptTest:] + 36
15 XCTest 0x00000001003c86bc -[XCTestCase(Failures) _performTurningExceptionsIntoFailuresInterruptAfterHandling:block:] + 54
16 XCTest 0x000000010036c4db __24-[XCTestCase invokeTest]_block_invoke + 854
17 XCTest 0x00000001003cd659 -[XCUITestContext performInScope:] + 237
18 XCTest 0x000000010036c170 -[XCTestCase invokeTest] + 175
19 XCTest 0x000000010036dea6 __26-[XCTestCase performTest:]_block_invoke_2 + 42
20 XCTest 0x00000001003c8772 +[XCTestCase(Failures) performFailableBlock:shouldInterruptTest:] + 36
21 XCTest 0x00000001003c86bc -[XCTestCase(Failures) _performTurningExceptionsIntoFailuresInterruptAfterHandling:block:] + 54
22 XCTest 0x000000010036dd53 __26-[XCTestCase performTest:]_block_invoke.326 + 90
23 XCTest 0x00000001003d24a1 +[XCTContext runInContextForTestCase:block:] + 225
24 XCTest 0x000000010036d454 -[XCTestCase performTest:] + 673
25 XCTest 0x00000001003b0555 -[XCTest runTest] + 57
26 XCTest 0x0000000100368b30 __27-[XCTestSuite performTest:]_block_invoke + 365
27 XCTest 0x000000010036830c -[XCTestSuite _performProtectedSectionForTest:testSection:] + 55
28 XCTest 0x00000001003685cd -[XCTestSuite performTest:] + 296
29 XCTest 0x00000001003b0555 -[XCTest runTest] + 57
30 XCTest 0x0000000100368b30 __27-[XCTestSuite performTest:]_block_invoke + 365
31 XCTest 0x000000010036830c -[XCTestSuite _performProtectedSectionForTest:testSection:] + 55
32 XCTest 0x00000001003685cd -[XCTestSuite performTest:] + 296
33 XCTest 0x00000001003b0555 -[XCTest runTest] + 57
34 XCTest 0x0000000100368b30 __27-[XCTestSuite performTest:]_block_invoke + 365
35 XCTest 0x000000010036830c -[XCTestSuite _performProtectedSectionForTest:testSection:] + 55
36 XCTest 0x00000001003685cd -[XCTestSuite performTest:] + 296
37 XCTest 0x00000001003b0555 -[XCTest runTest] + 57
38 XCTest 0x00000001003e6308 __44-[XCTTestRunSession runTestsAndReturnError:]_block_invoke + 40
39 XCTest 0x000000010038aaa4 -[XCTestObservationCenter _observeTestExecutionForBlock:] + 600
40 XCTest 0x00000001003e610e -[XCTTestRunSession runTestsAndReturnError:] + 369
41 XCTest 0x000000010034f865 -[XCTestDriver runTestsAndReturnError:] + 440
42 XCTest 0x00000001003d10f3 _XCTestMain + 1228
43 xctest 0x0000000100002155 main + 557
44 libdyld.dylib 0x00007fff593bb015 start + 1
45 ??? 0x0000000000000005 0x0 + 5
)
最佳答案
从 iOS 9 开始,您可以使用:unarchiveTopLevelObjectWithData(_:)
,它会抛出异常。
例子:
try? NSKeyedUnarchiver.unarchiveTopLevelObjectWithData(data)
关于swift - 如何在 Swift 中捕获 NSKeyedUnarchiver "NSInvalidUnarchiveOperationException"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51801808/
我正在使用其中有 UINavigationController 的 Storyboard。 View Controller 被弹出和推送。 问题是,当我推送一个 UIViewController 时,
* 由于未捕获的异常“NSInvalidUnarchiveOperationException”而终止应用程序,原因:“* -[NSKeyedUnarchiver decodeObjectForKey
使用带有嵌入序列的 ContainerView 我得到这个: * 由于未捕获的异常“NSInvalidUnarchiveOperationException”而终止应用程序,原因:“无法实例化名为 U
更新到 xCode 5 后,在 iOS 5 和 iOS 6 模拟器上运行我的应用程序时出现以下错误。它在 iOS 7 上运行良好。此代码未修改 xCode 升级之前的代码。 * Terminating
如果我在 ipad 3 ios 6.1 上运行我的应用程序,应用程序工作正常,但如果我在 ipad 1 ios 5.1 上运行它,我会收到此错误并且应用程序崩溃: 2013-02-09 12:20:5
这是 xcode 抛出的错误: Terminating app due to uncaught exception 'NSInvalidUnarchiveOperationException', re
我的应用程序启动失败,我将问题定位到以下代码: - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPat
请注意,我是 Swift 和 iOS 编程的新手,所以你们中的一些人可能会觉得这有点傻。 无论如何,我正在编码一个 Int 对象并将它与一个 String 键相关联,如下所示: func encode
我已将符合 NSCoding 的类“分配”的数组存档到共享(应用程序组)容器中的文件: class private func updateSharedFiles() { let path =
我在 Swift 中使用 Codable 和 NSKeyedArchiver 和 NSKeyedUnarchiver 来编码/解码对象。 当编码对象与预期格式匹配时,一切都会很好。但是,如果数据无效或
使用 ObjectiveC,我正在开发一个针对 iOS 11 的 SingleView 应用程序,该应用程序具有一个 View Controller / View 。在 View 顶部的 Main.s
用这个复制UIView UIView copyOfView = [NSKeyedUnarchiver unarchiveObjectWithData:[NSKeyedArchiver archived
在 Xcode 更新 (5.1) 之后,当我尝试在 iOS 6.x 中运行时,我的应用程序崩溃了。 我有一个应用程序,其中有一个自定义单元格和约束。 未选中 xib 文件的自动布局。我得到的错误是:
我有一个用户对象,我需要将其存储在 NSUserDefaults 中并与 iOS 8 扩展应用程序 (Watchkit) 共享。在主容器应用程序中,我可以毫无问题地对对象进行编码和解码。但是,当我尝试
我对此很陌生。我按照 Apple 的 iPhone 项目“HelloWorld”教程一步一步来。我在 iPhone 5.0 模拟器中运行它,它崩溃了: 2012-11-02 14:46:06.782
这个问题在这里已经有了答案: "Could not instantiate class named UIStoryboardShowSegueTemplate" - how can I make a
我正在做一个使用 Storyboard的项目(第一次使用 Storyboard)。在其中一个 View Controller 中,有一个带有 map View 的 View 和一个包含原型(proto
我没有在我的 iOS 应用程序中使用 MapKit;我通过 pod 使用 GoogleMaps v2.7.0。它在我的 iPhone5s iOS v10.3.3 上崩溃。 我没有任何线索。有人经历过吗
当然,我用谷歌搜索并使用了 stackoverflow 中的搜索。我发现了一些类似的讨论: Could not instantiate class named MKMapView http://for
我是一名优秀的程序员,十分优秀!