Why might releasing a managed object crash in -[_PFManagedObjectReferenceQueue _queueForDealloc:]? - cocoa

I am occasionally seeing crashes with a stack trace like this:
0 libobjc.A.dylib 0x97dc0edb objc_msgSend + 27
1 com.apple.CoreData 0x97edcdc2 -[_PFManagedObjectReferenceQueue _queueForDealloc:] + 162
2 com.apple.CoreData 0x97edccbe -[NSManagedObject release] + 94
3 com.apple.CoreFoundation 0x9318ef38 CFRelease + 152
4 com.apple.CoreFoundation 0x931a7460 __CFBasicHashStandardCallback + 384
5 com.apple.CoreFoundation 0x931a706e __CFBasicHashDrain + 478
6 com.apple.CoreFoundation 0x9318f101 _CFRelease + 353
7 com.apple.CoreFoundation 0x931bbc6d _CFAutoreleasePoolPop + 253
8 com.apple.Foundation 0x973270aa NSPopAutoreleasePool + 76
9 com.apple.Foundation 0x97326fd2 -[NSAutoreleasePool drain] + 130
10 com.apple.AppKit 0x95087185 -[NSApplication run] + 627
11 com.apple.AppKit 0x9507f2d9 NSApplicationMain + 574
12 com.karelia.Sandvox 0x70001ef6 start + 54
Unfortunately, it's rather random to reproduce. Does anyone have any ideas what could cause such a crash? Doesn't help that no-one seems to have mentioned -_queueForDealloc: on the internet before!
I have a vague memory of a similar problem in the past where this was a symptom of deallocating a managed object while it still had KVO observers attached. Anyone concur?

Having finally been able to reproduce the problem on a development machine, it seems this crash is a side-effect of an earlier exception during context teardown.
The sequence of events is something like:
The MOC is being deallocated, so it's time to tear down its contents
To do so, all registered MOs are turned into faults*
The act of turning a MO into a fault sends KVO-notifications
An observer receives the notification and tries to act upon it, hitting a now invalid MO in the graph
Core Data throws an exception from the invalid access
For reasons unknown, that exception is not passed to my exception reporter
The MOs get released, but the exception left Core Data in an unexpected state, so the MO deallocation crashes
In short the real problem is that observers outlive the context; don't allow them to! Any object observing a MO should probably also have a strong reference to the MOC, like NSObjectController and friends do.
*I found in testing that Core Data often does this on a background thread, presumably to avoid blocking the main thread
MOC – managed object context
MO – managed object

-_queueForDealloc: is an undocumented internal method. It shows up in stacks from time to time but it's nothing we deal with directly.
Your problem is most likely caused by over-releasing a managedObject. A managedObject will be strongly retained by a context that inserts, updates or changes the object so if you micromanage the objects own retention, you can over-release it prior to the context releasing it. This cause the managed object to disappear at seemingly at random. Conversely, you can over-retain causing an object to persist after the context has deleted it.
I encourage people to avoid retaining managed objects but when you do, put them a class property or a collection like an array or set. That way, the retention is handled for you.

We hit into a a similar issue when using a private managed object context inside an NSOperation and we ended up working around it by weakifying any parameters and using a private #autoreleasepool. I'll elaborate further below.
Our current set up has an NSOperationQueue which has a long running calculation we do in the background. The operation first creates a private managed object context with the parent set as the main object context and goes and fetches its objects.
In the mean time, we have a separate NSOperationQueue elsewhere that syncs down new data from our server, potentially adding, updating, or removing objects used by our calculation operation.
We first saw a bunch of these crashes out in the wild and the only way to repro it locally is to have both calculation and sync operations run continuously and after 5-10 minutes, we would see a crash similar to one of the below:
Thread : Crashed: background queue :: NSOperation 0x18f43c90
0 libobjc.A.dylib 0x36f11f46 objc_msgSend + 5
1 CoreData 0x2928408f -[NSManagedObject release] + 166
2 CoreData 0x2927b4d7 -[_PFArray dealloc] + 94
3 libobjc.A.dylib 0x36f201a9 (anonymous namespace)::AutoreleasePoolPage::pop(void*) + 404
4 CoreFoundation 0x294713a9 _CFAutoreleasePoolPop + 16
5 Foundation 0x2a1b6453 -[__NSOperationInternal _start:] + 1058
6 Foundation 0x2a25b44b __NSOQSchedule_f + 186
7 libdispatch.dylib 0x3746d651 _dispatch_queue_drain + 952
8 libdispatch.dylib 0x3746809d _dispatch_queue_invoke + 84
9 libdispatch.dylib 0x3746eba1 _dispatch_root_queue_drain + 320
10 libdispatch.dylib 0x3746fcd7 _dispatch_worker_thread3 + 94
11 libsystem_pthread.dylib 0x375c6e31 _pthread_wqthread + 668
Thread : Crashed: background queue :: NSOperation 0x1db59e80
0 libsystem_kernel.dylib 0x3722edfc __pthread_kill + 8
1 libsystem_pthread.dylib 0x372acd37 pthread_kill + 62
2 libsystem_c.dylib 0x371ce909 abort + 76
3 libsystem_malloc.dylib 0x37258331 szone_size
4 libobjc.A.dylib 0x36bf1621 object_dispose + 20
5 CoreData 0x28ec571d -[_PFManagedObjectReferenceQueue dealloc] + 80
6 CoreData 0x28e5630f -[NSManagedObject dealloc] + 166
7 CoreData 0x28e55217 -[_PFManagedObjectReferenceQueue _queueForDealloc:] + 246
8 CoreData 0x28e5508f -[NSManagedObject release] + 166
9 CoreData 0x28e4c4d7 -[_PFArray dealloc] + 94
10 libobjc.A.dylib 0x36c031a9 (anonymous namespace)::AutoreleasePoolPage::pop(void*) + 404
11 CoreFoundation 0x29042149 _CFAutoreleasePoolPop + 16
12 Foundation 0x29d88c23 -[__NSOperationInternal _start:] + 1058
13 Foundation 0x29e2dc1b __NSOQSchedule_f + 186
14 libdispatch.dylib 0x371505b1 _dispatch_queue_drain + 952
15 libdispatch.dylib 0x3714af85 _dispatch_queue_invoke + 84
16 libdispatch.dylib 0x37151b9b _dispatch_root_queue_drain + 338
17 libdispatch.dylib 0x37152cd7 _dispatch_worker_thread3 + 94
18 libsystem_pthread.dylib 0x372a9e31 _pthread_wqthread + 668
Thread : Crashed: NSOperationQueue Serial Queue
0 libsystem_kernel.dylib 0x396871f0 __pthread_kill + 8
1 libsystem_pthread.dylib 0x396ef7b7 pthread_kill + 58
2 libsystem_c.dylib 0x39637ff9 abort + 76
3 libsystem_malloc.dylib 0x396aed25 szone_size
4 libobjc.A.dylib 0x390d93a9 object_dispose + 20
5 CoreData 0x2e3d4081 -[_PFManagedObjectReferenceQueue dealloc] + 80
6 CoreData 0x2e3655b7 -[NSManagedObject dealloc] + 166
7 CoreData 0x2e364501 -[_PFManagedObjectReferenceQueue _queueForDealloc:] + 244
8 CoreData 0x2e36437d -[NSManagedObject release] + 164
9 CoreData 0x2e35b867 -[_PFArray dealloc] + 94
10 libobjc.A.dylib 0x390e20d3 (anonymous namespace)::AutoreleasePoolPage::pop(void*) + 358
11 CoreFoundation 0x2e5294c1 _CFAutoreleasePoolPop + 16
12 Foundation 0x2ef29999 -[__NSOperationInternal _start:] + 1064
13 Foundation 0x2efcd745 __NSOQSchedule_f + 60
14 libdispatch.dylib 0x395c0cbd _dispatch_queue_drain + 488
15 libdispatch.dylib 0x395bdc6f _dispatch_queue_invoke + 42
16 libdispatch.dylib 0x395c15f1 _dispatch_root_queue_drain + 76
17 libdispatch.dylib 0x395c18dd _dispatch_worker_thread2 + 56
18 libsystem_pthread.dylib 0x396ecc17 _pthread_wqthread + 298
We reviewed the code multiple times and was not able to determine why it was crashing. We tried enabling NSZombies, but would run out of memory long before we could get a repro.
What we ended up doing is the following 2 things:
#autoreleasepool
Inside our [privateObjectContext performBlockAndWait:^{…}] which resides inside our NSOperationBlock, we wrapped all the code inside an #autoreleasepool{…}. That way all NSManagedObjects retrieved during that block of code will be mark for release before leaving the performBlockAndWait.
weakify/strongify
Any parameters that include NSManagedObjects were weakify before passing it into the block, and strongify once in the block. This way since we no longer have a strong reference to them, they can be released if they become out of date while we wait for the NSOperation to start. Here's a good article on how weakify/strongify works: http://aceontech.com/objc/ios/2014/01/10/weakify-a-more-elegant-solution-to-weakself.html

i has another solution so solve that bug. In examples, MOC properties for ARC looks like (readonly,strong,nonatomic)
After weeks of dancing about that time-to-time crash i got solution for osx (just remove nonatomic).
Now it perfect, all crashes go out.

Related

In core data NSFetchRequest, getting NSInvalidArgumentException, unrecognized selector sent to instance

The code is as follows (I isolated it through print statements, the error happens in these lines):
let request = NSFetchRequest<Group>(entityName: "Group")
request.sortDescriptors = [NSSortDescriptor(key: "id", ascending: false)]
let groups = try! context.fetch(request)
Notes (edited):
SQLite backing store
XCode 12.3
I have checked the basics, there exists a Group entity with an id field.
Even if there is a simple solution, would be also very grateful for a bug-fixing strategy here. Is there some way I can read through documentation to figure this out myself?
Full Stack Trace:
2020-12-31 08:01:35.180433-0700 Things[25892:958568] -[__NSConcreteUUID compare:]: unrecognized selector sent to instance 0x60000367a9e0
2020-12-31 08:01:35.190552-0700 Things[25892:958568] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSConcreteUUID compare:]: unrecognized selector sent to instance 0x60000367a9e0'
*** First throw call stack:
(
0 CoreFoundation 0x00007fff20420af6 __exceptionPreprocess + 242
1 libobjc.A.dylib 0x00007fff20177e78 objc_exception_throw + 48
2 CoreFoundation 0x00007fff2042f6f7 +[NSObject(NSObject) instanceMethodSignatureForSelector:] + 0
3 CoreFoundation 0x00007fff20425036 ___forwarding___ + 1489
4 CoreFoundation 0x00007fff20427068 _CF_forwarding_prep_0 + 120
5 Foundation 0x00007fff2084132b _NSCompareObject + 46
6 CoreFoundation 0x00007fff203aa09d __CFSimpleMergeSort + 74
7 CoreFoundation 0x00007fff203aa133 __CFSimpleMergeSort + 224
8 CoreFoundation 0x00007fff203a9c4a CFSortIndexes + 395
9 CoreFoundation 0x00007fff203aa5f6 CFMergeSortArray + 288
10 Foundation 0x00007fff208419d1 _sortedObjectsUsingDescriptors + 558
11 Foundation 0x00007fff20841bbe -[NSArray(NSKeyValueSorting) sortedArrayUsingDescriptors:] + 232
12 CoreData 0x00007fff25113c7e -[NSManagedObjectContext executeFetchRequest:error:] + 4353
13 libswiftCoreData.dylib 0x00007fff54a88993 $sSo22NSManagedObjectContextC8CoreDataE5fetchySayxGSo14NSFetchRequestCyxGKSo0gH6ResultRzlF + 51
14 Things 0x00000001048b7bdf $s6Things5GroupC6getAll7contextSayACGSo22NSManagedObjectContextC_tFZ + 591
15 Things 0x0000000104872da7 $s6Things16thingDataToThing2td7contextAA0E0CAA0eC0V_So22NSManagedObjectContextCtF + 1399
16 Things 0x00000001048836e5 $s6Things9APIServerC14syncWithRemote7context8callbackySo22NSManagedObjectContextC_yyctF14completionBothL_10groupDatas05thingN0ySayAA9GroupDataVG_SayAA05ThingQ0VGtF0O6MapperL_2tdAA0R0CAP_tF + 37
17 Things 0x0000000104883908 $s6Things9ThingDataVAA0B0Cs5Error_pIggozo_AcEsAF_pIegnrzo_TR + 56
18 Things 0x000000010488b034 $s6Things9ThingDataVAA0B0Cs5Error_pIggozo_AcEsAF_pIegnrzo_TRTA + 20
19 libswiftCore.dylib 0x00007fff2f8edfe2 $sSlsE3mapySayqd__Gqd__7ElementQzKXEKlF + 674
20 Things 0x000000010488313f $s6Things9APIServerC14syncWithRemote7context8callbackySo22NSManagedObjectContextC_yyctF14completionBothL_10groupDatas05thingN0ySayAA9GroupDataVG_SayAA05ThingQ0VGtF + 3855
21 Things 0x0000000104883b0c $s6Things9APIServerC14syncWithRemote7context8callbackySo22NSManagedObjectContextC_yyctF16completionGroupsL_10groupDatasySayAA9GroupDataVG_tF0kA0L_05thingN0ySayAA05ThingP0VG_tF + 108
22 Things 0x000000010488207f $sSay6Things9ThingDataVGIegg_ADIegn_TR + 15
23 Things 0x000000010487ecfc $s6Things9APIServerC7request3url15queryParameters6parser0C6Method10completion12errorHandler12httpBodyJsonySS_SDyS2SGx10Foundation4DataVcAA11RequestTypeOyxcySScAOSgtlFyAR_So13NSURLResponseCSgs5Error_pSgtcfU_yycfU_ + 348
24 Things 0x000000010488b463 $s6Things9APIServerC7request3url15queryParameters6parser0C6Method10completion12errorHandler12httpBodyJsonySS_SDyS2SGx10Foundation4DataVcAA11RequestTypeOyxcySScAOSgtlFyAR_So13NSURLResponseCSgs5Error_pSgtcfU_yycfU_TA + 51
25 Things 0x000000010487ed70 $sIeg_IeyB_TR + 48
26 libdispatch.dylib 0x0000000104c2d7ec _dispatch_call_block_and_release + 12
27 libdispatch.dylib 0x0000000104c2e9c8 _dispatch_client_callout + 8
28 libdispatch.dylib 0x0000000104c3ce75 _dispatch_main_queue_callback_4CF + 1152
29 CoreFoundation 0x00007fff2038edbb __CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__ + 9
30 CoreFoundation 0x00007fff2038963e __CFRunLoopRun + 2685
31 CoreFoundation 0x00007fff203886d6 CFRunLoopRunSpecific + 567
32 GraphicsServices 0x00007fff2bededb3 GSEventRunModal + 139
33 UIKitCore 0x00007fff24690e0b -[UIApplication _run] + 912
34 UIKitCore 0x00007fff24695cbc UIApplicationMain + 101
35 libswiftUIKit.dylib 0x00007fff54d1e5f2 $s5UIKit17UIApplicationMainys5Int32VAD_SpySpys4Int8VGGSgSSSgAJtF + 98
36 Things 0x000000010489497a $sSo21UIApplicationDelegateP5UIKitE4mainyyFZ + 122
37 Things 0x00000001048948ee $s6Things11AppDelegateC5$mainyyFZ + 46
38 Things 0x00000001048949c9 main + 41
39 libdyld.dylib 0x00007fff202593e9 start + 1
)
libc++abi.dylib: terminating with uncaught exception of type NSException
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSConcreteUUID compare:]: unrecognized selector sent to instance 0x60000367a9e0'
terminating with uncaught exception of type NSException
CoreSimulator 732.18.6 - Device: iPhone 11 (93AB6812-3722-4022-B989-2E1423E6E6D0) - Runtime: iOS 14.3 (18C61) - DeviceType: iPhone 11
Sorting on UUID fields is normally not supported by Core Data. To get it working, change the key path to a string type, like this:
[NSSortDescriptor(key: "id.description", ascending: false)]
Key path id.uuidString would theoretically be better, but this still gives the same crash as described in the original question (at least in macOS 11).

Application Suspended when calling method GeneXus.SD.Media.Camera.TakePhoto() using GX16 U7 SD IOS Generator

On devices with iOS 13, when calling the GeneXus.SD.Media.Camera.TakePhoto() method for the first time takes about 10 to 15 seconds to continue program execution.
Execution of any other option or button is suspended until the camera control has been shown, otherwise the application stops working.
Note: This behavior only happens the first time GeneXus.SD.Media.Camera.TakePhoto() method is called.
The apparent problem is that Genexus is making a call to a thread in the background without using the following statement:
DispatchQueue.main.async {
//Do UI Code here.
//Call Google maps methods.}
The log that the application shows when it is waiting to show the control of the camera is the following:
Log en XCODE 11.3
Main Thread Checker: UI API called on a background thread: -[UIApplication userInterfaceLayoutDirection]
PID: 268, TID: 5281, Thread name: (none), Queue name: com.apple.camera.zoom-dial-image-generation, QoS: 21
Backtrace:
4 GXUIApplication 0x000000010c674170 $s15GXUIApplicationAAC28userInterfaceLayoutDirectionSo06UIUsercdE0VvgTo + 212
5 UIKitCore 0x000000019fea34fc AA897CA9-8D15-3DD7-BB4F-8D90F9A28571 + 15566076
6 UIKitCore 0x000000019f6bdc8c AA897CA9-8D15-3DD7-BB4F-8D90F9A28571 + 7285900
7 UIKitCore 0x000000019f6bda18 AA897CA9-8D15-3DD7-BB4F-8D90F9A28571 + 7285272
8 UIKitCore 0x000000019f64a848 AA897CA9-8D15-3DD7-BB4F-8D90F9A28571 + 6813768
9 CameraUI 0x00000001bdfee5a8 91E5E69E-0F28-35E3-86F9-7AA8B1D7F726 + 1369512
10 UIKitCore 0x000000019f63ee94 AA897CA9-8D15-3DD7-BB4F-8D90F9A28571 + 6766228
11 UIKitCore 0x000000019f63ecb0 AA897CA9-8D15-3DD7-BB4F-8D90F9A28571 + 6765744
12 UIKitCore 0x000000019f63c464 AA897CA9-8D15-3DD7-BB4F-8D90F9A28571 + 6755428
13 CameraUI 0x00000001bdfee2c0 91E5E69E-0F28-35E3-86F9-7AA8B1D7F726 + 1368768
14 CameraUI 0x00000001bdfed65c 91E5E69E-0F28-35E3-86F9-7AA8B1D7F726 + 1365596
15 AssetsLibraryServices 0x00000001b0462d3c 31232DEC-0B77-3A8B-B80A-A51A16204F8E + 228668
16 libdispatch.dylib 0x000000010d091e1c _dispatch_call_block_and_release + 32
17 libdispatch.dylib 0x000000010d09327c _dispatch_client_callout + 20
18 libdispatch.dylib 0x000000010d09a90c _dispatch_lane_serial_drain + 720
19 libdispatch.dylib 0x000000010d09b4fc _dispatch_lane_invoke + 408
20 libdispatch.dylib 0x000000010d0a64dc _dispatch_workloop_worker_thread + 1344
21 libsystem_pthread.dylib 0x000000019b62b6d0 _pthread_wqthread + 280
22 libsystem_pthread.dylib 0x000000019b6319e8 start_wqthread + 8
2020-02-03 16:52:16.618996-0500 Routik[268:5281] [reports] Main Thread Checker: UI API called on a background thread: -[UIApplication userInterfaceLayoutDirection]
PID: 268, TID: 5281, Thread name: (none), Queue name: com.apple.camera.zoom-dial-image-generation, QoS: 21
Backtrace:
4 GXUIApplication 0x000000010c674170 $s15GXUIApplicationAAC28userInterfaceLayoutDirectionSo06UIUsercdE0VvgTo + 212
5 UIKitCore 0x000000019fea34fc AA897CA9-8D15-3DD7-BB4F-8D90F9A28571 + 15566076
6 UIKitCore 0x000000019f6bdc8c AA897CA9-8D15-3DD7-BB4F-8D90F9A28571 + 7285900
7 UIKitCore 0x000000019f6bda18 AA897CA9-8D15-3DD7-BB4F-8D90F9A28571 + 7285272
8 UIKitCore 0x000000019f64a848 AA897CA9-8D15-3DD7-BB4F-8D90F9A28571 + 6813768
9 CameraUI 0x00000001bdfee5a8 91E5E69E-0F28-35E3-86F9-7AA8B1D7F726 + 1369512
10 UIKitCore 0x000000019f63ee94 AA897CA9-8D15-3DD7-BB4F-8D90F9A28571 + 6766228
11 UIKitCore 0x000000019f63ecb0 AA897CA9-8D15-3DD7-BB4F-8D90F9A28571 + 6765744
12 UIKitCore 0x000000019f63c464 AA897CA9-8D15-3DD7-BB4F-8D90F9A28571 + 6755428
13 CameraUI 0x00000001bdfee2c0 91E5E69E-0F28-35E3-86F9-7AA8B1D7F726 + 1368768
14 CameraUI 0x00000001bdfed65c 91E5E69E-0F28-35E3-86F9-7AA8B1D7F726 + 1365596
15 AssetsLibraryServices 0x00000001b0462d3c 31232DEC-0B77-3A8B-B80A-A51A16204F8E + 228668
16 libdispatch.dylib 0x000000010d091e1c _dispatch_call_block_and_release + 32
17 libdispatch.dylib 0x000000010d09327c _dispatch_client_callout + 20
18 libdispatch.dylib 0x000000010d09a90c _dispatch_lane_serial_drain + 720
19 libdispatch.dylib 0x000000010d09b4fc _dispatch_lane_invoke + 408
20 libdispatch.dylib 0x000000010d0a64dc _dispatch_workloop_worker_thread + 1344
21 libsystem_pthread.dylib 0x000000019b62b6d0 _pthread_wqthread + 280
22 libsystem_pthread.dylib 0x000000019b6319e8 start_wqthread + 8
2020-02-03 16:52:26.217529-0500 Routik[268:5081] [Common] _BSMachError: port fe03; (os/kern) invalid capability (0x14) "Unable to insert COPY_SEND"
Actually, it's a false positive in Apple's Main Thread Checker tool. Let me explain:
Main Thread Checker works by at app launch, dynamically replaces the implementations of methods that should only be called on the main thread with a version that prepends the check. Methods known to be safe for use on background threads are excluded from this check.
The method called from a background thread is -[UIApplication userInterfaceLayoutDirection].
GeneXus applications use a subclass of UIApplication (GXUIApplication) which overrides this method (userInterfaceLayoutDirection) in order to support SetLanguage function of Right to Left languages on Left to Right configured devices at runtime (or the other way around). Inside this override, [super userInterfaceLayoutDirection] is called, and this is where Main Thread Checker raises the warning.
This method is called in the background internally from Apple's frameworks implementations as you can see in the Backtrace you posted, everything except GXUIApplication userInterfaceLayoutDirection method itself is not GeneXus code.
The problem is Main Thread Checker raises the [UIApplication userInterfaceLayoutDirection] call warning only when the call is explicit, and ignored when it's called internally from another Apple framework. In this case, it's considered explicit because the method is overwritten in the subclass even though it's called internally from another Apple framework.
You can check this by replacing in the source file main.m, in the line:
return UIApplicationMain(argc, argv, NSStringFromClass([GXUIApplication class]), NSStringFromClass([GXAppDelegate class]));
with:
return UIApplicationMain(argc, argv, NSStringFromClass([UIApplication class]), NSStringFromClass([GXAppDelegate class]));
With this change (not using the subclass with the override), Main Thread Checker won't raise the warning, even though the same method is still being called internally from a background thread.
We will look for a workaround for this Main Thread Checker issue in the upcoming GeneXus upgrades (thanks for the report) and also notify Apple about the issue with Main Thread Checker.
Meanwhile, you can disable Main Thread Checker from Xcode:
Also, you don't have to worry about this being an issue for your users, as Main Thread Checker is only active when the app is launched from Xcode (with Main Thread Checker diagnostic enabled).

Issues after updated to Xcode 5

I had my iOS App up to 98% completed on Xcode 4.6 and iOS 6.1 and it's working OK.
But then problems begin when I try to update my Xcode to version 5 and the SDK to iOS 7.
When I try to run the app on Xcode 5 but with iOS 6.1 it continues working ok, but when I tried to run on SDK 7 I have these issues:
2013-12-17 19:44:47.656 myAPP[2207:70b] *** Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<MKUserLocation 0x9d9af90> valueForUndefinedKey:]: this class is not key value coding-compliant for the key distanceAnnotation.'
*** First throw call stack:
(
0 CoreFoundation 0x01bf65e4 __exceptionPreprocess + 180
1 libobjc.A.dylib 0x019798b6 objc_exception_throw + 44
2 CoreFoundation 0x01c866a1 -[NSException raise] + 17
3 Foundation 0x0142d8ca -[NSObject(NSKeyValueCoding) valueForUndefinedKey:] + 282
4 Foundation 0x0139a921 _NSGetUsingKeyValueGetter + 81
5 Foundation 0x01399f5b -[NSObject(NSKeyValueCoding) valueForKey:] + 260
6 Foundation 0x013b9a5a -[NSObject(NSKeyValueCoding) valueForKeyPath:] + 409
7 Foundation 0x013c68c6 _sortedObjectsUsingDescriptors + 380
8 Foundation 0x013c66d7 -[NSMutableArray(NSKeyValueSorting) sortUsingDescriptors:] + 578
9 myapp
0x00009e50 -[mapa mapViewDidFinishLoadingMap:] + 496
10 MapKit 0x0037e974 -[MKMapView mapViewDidFinishLoadingTiles:] + 78
11 VectorKit 0x050a3ade -[VKMapView mapDidFinishLoadingTiles:] + 78
12 VectorKit 0x050abe4e -[VKMapCanvas mapModelDidFinishLoadingTiles:] + 46
13 VectorKit 0x050b82cd -[VKMapModel didStopLoadingTilesWithError:] + 77
14 VectorKit 0x051ae2e1 -[VKTileProvider didStopLoadingTilesWithError:] + 49
15 VectorKit 0x051b1c99 -[VKTileSource didFinishWithNetwork] + 73
16 VectorKit 0x051c3aa3 __41-[VKResourcesTileSource performDownload:]_block_invoke73 + 51
17 GeoServices 0x04bb98a6 ___ZNK49-[GEOTileLoaderInternal _loadedTile:forKey:info:]66__49-[GEOTileLoaderInternal _loadedTile:forKey:info:]_block_invoke3$_1clERKN8LoadItem9RequesterE_block_invoke_2 + 85
18 libdispatch.dylib 0x021f77f8 _dispatch_call_block_and_release + 15
19 libdispatch.dylib 0x0220c4b0 _dispatch_client_callout + 14
20 libdispatch.dylib 0x021fa75e _dispatch_main_queue_callback_4CF + 340
21 CoreFoundation 0x01c5ba5e __CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__ + 14
22 CoreFoundation 0x01b9c6bb __CFRunLoopRun + 1963
23 CoreFoundation 0x01b9bac3 CFRunLoopRunSpecific + 467
24 CoreFoundation 0x01b9b8db CFRunLoopRunInMode + 123
25 GraphicsServices 0x033579e2 GSEventRunModal + 192
26 GraphicsServices 0x03357809 GSEventRun + 104
27 UIKit 0x004dad3b UIApplicationMain + 1225
28 FarmValencia 0x000029ad main + 141
29 libdyld.dylib 0x0249e70d start + 1
)
libc++abi.dylib: terminating with uncaught exception of type NSException
Theres simply not enough information to correctly debug this item.
I can recommend however that you add a Breakpoint for all Exceptions
Here is an example of adding an All Exception breakpoint in XCode 4. The process is the same in XCode 5
http://www.alauda.ro/2013/02/03/xcode-4-exception-breakpoints/
Aside from that you may try working with NSSetUncaughtExceptionHandler
http://www.cocoawithlove.com/2010/05/handling-unhandled-exceptions-and.html
This will allow you to trap the error and output the results but bear in mind that this is something you should only do during debug.
Wrapping it in an "#if DEBUG" is a good idea.
I hope this helps you out. These kind of bugs are a pain to fix.
NOTE
You may check if the key value set you are using didn't change between SDK's
Are you by chance sending the message valueForUndefinedKey: to the class MKUserLocation?
Here's what the class reference says about getting user location:
"The MKUserLocation class defines a specific type of annotation that identifies the user’s current location. You do not create instances of this class directly. Instead, you retrieve an existing MKUserLocation object from the userLocation property of the map view displayed in your application."
https://developer.apple.com/library/ios/documentation/MapKit/Reference/MKUserLocation_Class/Reference/Reference.html

Why can’t I run Xcode debugger highlighting the call stack after a crash/exception?

So, when developing, I get a crash when running the app in iPhone simulator. Say something like this in the console...
2010-08-01 19:28:04.228 FakeCreme[32888:207] adding bucket: (null)
2010-08-01 19:28:04.230 FakeCreme[32888:207] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[NSMutableArray insertObject:atIndex:]: attempt to insert nil object at 0'
*** Call stack at first throw:
(
0 CoreFoundation 0x02641919 __exceptionPreprocess + 185
1 libobjc.A.dylib 0x0278f5de objc_exception_throw + 47
2 CoreFoundation 0x0263b571 -[__NSArrayM insertObject:atIndex:] + 225
3 CoreFoundation 0x026369c4 -[__NSArrayM addObject:] + 68
4 FakeCreme 0x0000b645 -[BucketsTable didReceiveEvents:withVerb:forDomain:] + 557
5 FakeCreme 0x0002e2fa -[EventManager addObject:withVerb:inDomain:] + 3206
6 FakeCreme 0x0000a7a8 -[BucketsTable viewDidLoad] + 1389
7 UIKit 0x003cac26 -[UIViewController view] + 179
8 UIKit 0x003c9050 -[UIViewController contentScrollView] + 42
9 UIKit 0x003d8df7 -[UINavigationController _computeAndApplyScrollContentInsetDeltaForViewController:] + 48
10 UIKit 0x003d74ff -[UINavigationController _layoutViewController:] + 43
11 UIKit 0x003d8789 -[UINavigationController _startTransition:fromViewController:toViewController:] + 524
12 UIKit 0x003d3329 -[UINavigationController _startDeferredTransitionIfNeeded] + 266
13 UIKit 0x004ee209 -[UILayoutContainerView layoutSubviews] + 226
14 QuartzCore 0x040e50d5 -[CALayer layoutSublayers] + 177
15 QuartzCore 0x040e4e05 CALayerLayoutIfNeeded + 220
16 QuartzCore 0x040e464c _ZN2CA7Context18commit_transactionEPNS_11TransactionE + 302
17 QuartzCore 0x040e42b0 _ZN2CA11Transaction6commitEv + 292
18 UIKit 0x0032563f -[UIApplication _reportAppLaunchFinished] + 39
19 UIKit 0x00325a68 -[UIApplication _runWithURL:payload:launchOrientation:statusBarStyle:statusBarHidden:] + 545
20 UIKit 0x0032f452 -[UIApplication handleEvent:withNewEvent:] + 1958
21 UIKit 0x00328074 -[UIApplication sendEvent:] + 71
22 UIKit 0x0032cac4 _UIApplicationHandleEvent + 7495
23 GraphicsServices 0x02cbbafa PurpleEventCallback + 1578
24 CoreFoundation 0x02622dc4 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ + 52
25 CoreFoundation 0x02583737 __CFRunLoopDoSource1 + 215
26 CoreFoundation 0x025809c3 __CFRunLoopRun + 979
27 CoreFoundation 0x02580280 CFRunLoopRunSpecific + 208
28 CoreFoundation 0x025801a1 CFRunLoopRunInMode + 97
29 UIKit 0x00325226 -[UIApplication _run] + 625
30 UIKit 0x00330b58 UIApplicationMain + 1160
31 FakeCreme 0x000025a0 main + 102
32 FakeCreme 0x00002531 start + 53
33 ??? 0x00000001 0x0 + 1
)
terminate called after throwing an instance of 'NSException'
(Details of crash don't matter, just an illustration.)
Now, it used to be the case that when I get such a crash, I can run Xcode debugger and get the call trace conveniently loaded there, so that the debugger loads the call stack and I can interactively navigate in the methods that were called just at the time.
But ever since installing Xcode 3.2.3 and/or switching computers, this doesn't work. I load debugger at this point where my app is halted, but it comes up empty, no call stack.
I'm sure there is an Xcode setting I have missed somewhere, but didn't find anything on my own quickly glancing through settings. What do I need to do to get the call stack loaded in debugger at this point?
Sometimes, for some reason the XCode debugger stops in a place where it simply cannot pick up debug values. I've seen it when trying to stop in callbacks for animations. There's not a setting you can really chose to fix this (though you should check you are running in Debugn and not Release, and that debugging symbol generation is still checked in project settings).
You might try using the LLVM debugger in XCode 4.
However, to solve your particular problem - it seems pretty clear you are trying to insert an object into an array in +didReceiveEvents:WithVerb:ForDomain: in BucketsTable, where you are inserting some point too far after the last element in the array. You might try an NSLog around any array insert there with index and object values.

Core Data Crashing during NSManagedObjectContext processPendingChanges

I am getting a (what seems to me as a strange) crash with Core Data.
From what I can gather it is happening when Core Data does a save and subsequent managedObjectContextDidSave methods are fired.
I am at a loss and really hoping someone can help me out or guide me in the right direction.
The crash report is as follows:
Exception Type: EXC_BAD_ACCESS (SIGBUS)
Exception Codes: KERN_PROTECTION_FAILURE at 0x0000000b
Crashed Thread: 0
Thread 0 Crashed:
0 libobjc.A.dylib 0x000026f4 objc_msgSend + 16
1 Foundation 0x000437a4 NSClassFromObject + 8
2 Foundation 0x0000ba54 _NSIMPForObjectAndSelector + 4
3 Foundation 0x00095eae -[NSSortDescriptor compareObject:toObject:] + 110
4 CoreData 0x000b0a6e +[NSFetchedResultsController(PrivateMethods) _insertIndexForObject:inArray:lowIdx:highIdx:sortDescriptors:] + 174
5 CoreData 0x000b1496 -[NSFetchedResultsController(PrivateMethods) _postprocessInsertedObjects:] + 342
6 CoreData 0x000b32d6 -[NSFetchedResultsController(PrivateMethods) _postprocessUpdatedObjects:] + 430
7 CoreData 0x000b2a5e -[NSFetchedResultsController(PrivateMethods) _managedObjectContextDidChange:] + 498
8 Foundation 0x0004bbf6 _nsnote_callback + 162
9 CoreFoundation 0x00050af2 _CFXNotificationPostNotification + 298
10 Foundation 0x000497f4 -[NSNotificationCenter postNotificationName:object:userInfo:] + 64
11 CoreData 0x0002e42e -[NSManagedObjectContext(_NSInternalNotificationHandling) _postObjectsDidChangeNotificationWithUserInfo:] + 66
12 CoreData 0x0007fd26 -[NSManagedObjectContext(_NSInternalChangeProcessing) _createAndPostChangeNotification:withDeletions:withUpdates:withRefreshes:] + 134
13 CoreData 0x0001670a -[NSManagedObjectContext(_NSInternalChangeProcessing) _postRefreshedObjectsNotificationAndClearList] + 70
14 CoreData 0x000164ac -[NSManagedObjectContext(_NSInternalChangeProcessing) _processRecentChanges:] + 1656
15 CoreData 0x0004b5fa -[NSManagedObjectContext processPendingChanges] + 10
16 CoreData 0x0003e2a4 _performRunLoopAction + 120
17 CoreFoundation 0x0000fb50 __CFRunLoopDoObservers + 420
18 CoreFoundation 0x00056a32 CFRunLoopRunSpecific + 1734
19 CoreFoundation 0x00056356 CFRunLoopRunInMode + 42
20 GraphicsServices 0x00003cb8 GSEventRunModal + 108
21 GraphicsServices 0x00003d64 GSEventRun + 56
22 UIKit 0x00002768 -[UIApplication _run] + 384
23 UIKit 0x0000146c UIApplicationMain + 688
24 MyApp 0x000022d2 main (main.m:14)
25 MyApp 0x00002248 start + 44
It looks like one of the items in one of your database arrays is getting released one too many times (and therefore gets deallocated). It's crashing trying to sort your array, making a comparison with a deallocated object.
Try running your program with NSZombieEnabled -- it prevents the deallocation so you can see which object is getting messages sent to it with a retain count of 0.
If you are using a NSFetchedResultsController then there may be an error in that code and it is not easy to see that. I would suggest putting in some log statements into your NSFetchedResultsController delegate methods and watch which one is getting fired.
Since the NSFRC is fired as part of the save routine of the NSManagedObjectContext, an error in its delegate can easily be misinterpreted as an error in the save itself.
Update 1
If its on a date then perhaps when you set that date somewhere you are overreleasing it yourself? Perhaps calling a -release on a [NSDate date]. That type of error would be hidden until Core Data tried to access the date object.

Resources