2
votes

EDIT: Page is one of my entities

EIDT2: I'm always running with '-com.apple.CoreData.ConcurrencyDebug 1' and I've got no concurrency issues reported by that

I've stared to see a crash that I have no clue how to solve. I can't find when it was introduced it seems to come from CoreData. And also it's not 100% reproducible.

How can I track it down better? Is it me?

 Fatal Exception: NSInvalidArgumentException
-[Page compare:]: unrecognized selector sent to instance 0x281c640a0

With the following stack-trace:

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

I think I've found it! As a last sorting-resort, I wanted to sort by primary-key and added this:

enter image description here

And it seems like that didn't work.. Because the crash happens when the names and years are the same, thus it's using: NSSortDescriptor(key: "self", ascending: true)

5 Foundation 0x1b8d8bc34 _NSCompareObject + 64 (NSSortDescriptor.m:275) in another crash I got from a the crash, which gave me the file as well (NSSortDescriptor.m), which got me thinking more...

1
Usually this sort of thing is diagnostic for a threading mistake. Are you trying to work with Core Data in a background thread? What's a Page?matt
I'm running with '-com.apple.CoreData.ConcurrencyDebug 1', so it ought to tell me about threading mistakes :/netdigger
Guessing from stack entries.... Do you have any code that passes a block to CoreData for async execution? (Assuming Page is your class, you could also try creating a temporary compare: method as a debugging tool and see what calls it.Phillip Mills
A Page is one of my CoreData entities. It represents a page in a PDF.netdigger
No way! I think I've found it.. Check the post...netdigger

1 Answers

2
votes

Shortly after I posted the question I got another crash report which had the file-names in it as well (not just functions).

Which was:

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

This lead me to believe it had something to do with NSSortDescriptor, and surely I added some sorting on self some time ago to keep a consistent order between items that had the same "name" and "year".

Interestingly the crash just occurred when inserting objects and not when loading up the collectionView.

I've actually found the post that led me to do this (though I must have missed the warning):

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