【发布时间】:2020-02-19 19:09:40
【问题描述】:
编辑:Page 是我的实体之一
EIDT2:我始终使用“-com.apple.CoreData.ConcurrencyDebug 1”运行,并且没有报告任何并发问题
我看到一个我不知道如何解决的崩溃。我找不到它是什么时候引入的,它似乎来自 CoreData。而且它也不是 100% 可重现的。
我怎样才能更好地追踪它?是我吗?
Fatal Exception: NSInvalidArgumentException
-[Page compare:]: unrecognized selector sent to instance 0x281c640a0
使用以下堆栈跟踪:
Fatal Exception: NSInvalidArgumentException
0 CoreFoundation 0x192cc896c __exceptionPreprocess
1 libobjc.A.dylib 0x1929e1028 objc_exception_throw
2 CoreFoundation 0x192bc6dcc -[NSOrderedSet initWithSet:copyItems:]
3 CoreFoundation 0x192ccd048 ___forwarding___
4 CoreFoundation 0x192ccf3a0 _CF_forwarding_prep_0
5 Foundation 0x1930afc3c _NSCompareObject
6 CoreData 0x197670e24 +[NSFetchedResultsController(PrivateMethods) _insertIndexForObject:inArray:lowIdx:highIdx:sortDescriptors:]
7 CoreData 0x197671034 -[NSFetchedResultsController(PrivateMethods) _updateFetchedObjectsWithInsertChange:]
8 CoreData 0x19766b73c -[NSFetchedResultsController(PrivateMethods) _updateFetchedObjectsWithInsertedObjects:deletedObjects:updatedObjects:]
9 CoreData 0x19779829c __82-[NSFetchedResultsController(PrivateMethods) _core_managedObjectContextDidChange:]_block_invoke
10 CoreData 0x197757aac developerSubmittedBlockToNSManagedObjectContextPerform
11 CoreData 0x1976221c4 -[NSManagedObjectContext performBlockAndWait:]
12 CoreData 0x19762b81c -[NSFetchedResultsController(PrivateMethods) _core_managedObjectContextDidChange:]
13 Foundation 0x19309306c __57-[NSNotificationCenter addObserver:selector:name:object:]_block_invoke_2
14 CoreFoundation 0x192c2099c __CFNOTIFICATIONCENTER_IS_CALLING_OUT_TO_AN_OBSERVER__
15 CoreFoundation 0x192c209ec ___CFXRegistrationPost1_block_invoke
16 CoreFoundation 0x192c1fce4 _CFXRegistrationPost1
17 CoreFoundation 0x192c1f97c ___CFXNotificationPost_block_invoke
18 CoreFoundation 0x192b98910 -[_CFXNotificationRegistrar find:object:observer:enumerator:]
19 CoreFoundation 0x192c1f2ac _CFXNotificationPost
20 Foundation 0x192f81bfc -[NSNotificationCenter postNotificationName:object:userInfo:]
21 CoreData 0x1976329dc -[NSManagedObjectContext(_NSInternalNotificationHandling) _postContextDidMergeChangesNotificationWithUserInfo:]
22 CoreData 0x19762b6b4 -[NSManagedObjectContext(_NSInternalChangeProcessing) _createAndPostChangeNotification:deletions:updates:refreshes:deferrals:wasMerge:]
23 CoreData 0x197635e00 -[NSManagedObjectContext(_NSInternalChangeProcessing) _postRefreshedObjectsNotificationAndClearList]
24 CoreData 0x19762a4fc -[NSManagedObjectContext(_NSInternalChangeProcessing) _processRecentChanges:]
25 CoreData 0x197631f1c -[NSManagedObjectContext _mergeChangesFromDidSaveDictionary:usingObjectIDs:]
26 CoreData 0x19763228c -[NSManagedObjectContext mergeChangesFromContextDidSaveNotification:]
27 CoreData 0x197757aac developerSubmittedBlockToNSManagedObjectContextPerform
28 libdispatch.dylib 0x19296dfd8 _dispatch_client_callout
29 libdispatch.dylib 0x192979cc8 _dispatch_main_queue_callback_4CF
30 CoreFoundation 0x192c43cc8 __CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__
31 CoreFoundation 0x192c3ea24 __CFRunLoopRun
32 CoreFoundation 0x192c3df40 CFRunLoopRunSpecific
33 GraphicsServices 0x19cebb534 GSEventRunModal
34 UIKitCore 0x196db6a60 UIApplicationMain
35 Calendarly 0x1005812fc main + 29 (AppDelegate.swift:29)
36 libdyld.dylib 0x192abce18 start
我想我找到了!作为最后的排序方法,我想按主键排序并添加:
这似乎不起作用..因为当名称和年份相同时发生崩溃,因此它使用:NSSortDescriptor(key: "self", ascending: true)
5 Foundation 0x1b8d8bc34 _NSCompareObject + 64 (NSSortDescriptor.m:275) 在另一个崩溃中,我从崩溃中得到了文件(NSSortDescriptor.m),这让我思考了更多......
【问题讨论】:
-
通常这种事情是对线程错误的诊断。您是否尝试在后台线程中使用 Core Data?什么是页面?
-
我正在运行'-com.apple.CoreData.ConcurrencyDebug 1',所以它应该告诉我线程错误:/
-
从堆栈条目中猜测......你有任何代码可以将块传递给 CoreData 以进行异步执行吗? (假设
Page是你的类,你也可以尝试创建一个临时的compare:方法作为调试工具,看看是什么调用它。 -
A
Page是我的 CoreData 实体之一。它代表 PDF 中的一个页面。 -
不可能!我想我找到了..检查帖子...