我的应用使用核心数据。我最近升级到了Xcode 10.2和swift 5,从那时起我就收到了与核心数据有关的随机崩溃。
从我收集的内容来看,当尝试从后台线程更改Core Data时(从服务器中提取新数据后)。
我收到以下错误消息
2019-03-31 14:49:17.358685+0300 LeaderMES[24226:595701] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSTaggedDate objectForKey:]: unrecognized selector sent to instance 0x8000000000000000'
要么
2019-03-31 14:37:04.676485+0300 LeaderMES[23749:583097] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[_NSCoreDataTaggedObjectID objectForKey:]: unrecognized selector sent to instance 0x8000000000000000'
不仅我的代码用于工作,这个实例编号看起来很可疑
我的应用程序连接到遇到其中一个错误的crashlytics。这是它捕获的堆栈跟踪:
Fatal Exception: NSInvalidArgumentException
0 CoreFoundation 0x1086f86e3 (Missing)
1 libobjc.A.dylib 0x10771bac5 objc_exception_throw
2 CoreFoundation 0x108716ab4 (Missing)
3 CoreFoundation 0x1086fd443 (Missing)
4 CoreFoundation 0x1086ff238 (Missing)
5 libswiftCore.dylib 0x109914dcc (Missing)
6 libswiftCore.dylib 0x109b407b9 (Missing)
7 LeaderMES 0x105080a8d closure #1 in LMNotificationRepository.loadNotificationHistory(forFactory:successCompletion:errorCompletion:) (LMNotificationRepository.swift:360)
8 LeaderMES 0x105091271 partial apply for closure #1 in LMNotificationRepository.loadNotificationHistory(forFactory:successCompletion:errorCompletion:) (<compiler-generated>)
9 LeaderMES 0x10510b872 closure #1 in LMHttpProvider.procedeRequest(_:completionHandler:) (LMHTTPProvider.swift:299)
10 LeaderMES 0x10510e381 partial apply for closure #1 in LMHttpProvider.procedeRequest(_:completionHandler:) (<compiler-generated>)
11 LeaderMES 0x1050ce176 thunk for @escaping @callee_guaranteed (@guaranteed Data?, @guaranteed NSURLResponse?, @guaranteed Error?) -> () (<compiler-generated>)
12 CFNetwork 0x10adf6178 (Missing)
13 CFNetwork 0x10ae0cc56 (Missing)
14 Foundation 0x10666f412 __NSBLOCKOPERATION_IS_CALLING_OUT_TO_A_BLOCK__
15 Foundation 0x10666f31a -[NSBlockOperation main]
16 Foundation 0x10666c1f4 -[__NSOperationInternal _start:]
17 Foundation 0x106671f5b __NSOQSchedule_f
18 libdispatch.dylib 0x10a539ccf (Missing)
19 libdispatch.dylib 0x10a53ad02 (Missing)
20 libdispatch.dylib 0x10a53d6be (Missing)
21 libdispatch.dylib 0x10a53cd49 (Missing)
22 libdispatch.dylib 0x10a549ad3 (Missing)
23 libdispatch.dylib 0x10a54a330 (Missing)
24 libsystem_pthread.dylib 0x10a91c6b3 (Missing)
25 libsystem_pthread.dylib 0x10a91c3fd (Missing)
所提到的所有缺失的dylib是什么?
我已经尝试使用DispatchQueue将所有Core Data活动移动到主线程,但没有运气。
我已经从模拟器中删除了应用程序并重新安装它,到目前为止崩溃不会重复。关于是什么导致这次崩溃的任何想法?
它看起来像是在Xcode 10.2中完成的非优化构建的错误。我没有在我的应用程序中使用核心数据,它也崩溃了
-[xxx objectForKey:]: unrecognized selector sent to instance 0x8000000000000000'
XXX有时是__NSTaggedDate
,有时它是另一种类型,但地址始终是0x8000000000000000
。当我通过有效密钥访问有效字典时,调试器停在一行,它根本没用。当我将优化更改为Optimise for speed -O
进行调试方案时,应用程序停止崩溃。
您正在发送方法objectForKey:通常用于字典。然而,接收器是TaggedDate对象。 TaggedDate与NSDate基本相同(出于我们的目的)。所以你设法有一个NSDate对象,你期望一个字典。
在异常上添加一个断点,这样你就可以退回到调用者,并找出你想要一个字典的NSDate对象的原因。当dict证明是一个NSDate时,期待像dict [@“some key”]这样的行。