【问题标题】:'-[Page compare:] unrecognized selector sent to instance' in CoreDataCoreData 中的“-[页面比较:] 无法识别的选择器发送到实例”
【发布时间】: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 中的一个页面。
  • 不可能!我想我找到了..检查帖子...

标签: ios swift core-data


【解决方案1】:

在我发布问题后不久,我收到了另一个崩溃报告,其中也包含文件名(不仅仅是函数)。

这是:

5 Foundation 0x1b8d8bc34 _NSCompareObject + 64 (NSSortDescriptor.m:275

这让我相信它与NSSortDescriptor 有关,当然我前一段时间在self 上添加了一些排序,以保持具有相同“名称”和“年份”的项目之间的一致顺序。

有趣的是,崩溃只是在插入对象时发生,而不是在加载 collectionView 时发生。

我实际上找到了导致我这样做的帖子(尽管我一定错过了警告):

https://stackoverflow.com/a/52881564/897465

【讨论】:

  • 非常好。请注意,Q&A 真正告诉你的只是添加另一个属性,让你有更多的东西可以排序。我认为这将是最好的方式。
  • 是的,可能会添加created或类似
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-21
  • 2015-04-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多