Hbombre
Hbombre

Reputation: 111

coder.decodeDouble causing crashes on app updates, value was previously an optional

I have an object that stores latitude and longitude coordinates. At one point, they were stored as an Optional Double?. I have since changed so it is a non optional Double. Now I see random crash logs from what I assume is users updating their app.

I tried checking to make sure that there is a value there, but it is still causing the crash.

    let lat: Double

   ...

   required init (coder aDecoder: NSCoder) {

        ...

        if aDecoder.containsValue(forKey: "lat") {
            lat = aDecoder.decodeDouble(forKey: "lat")  //here is the crash
        }else{
            lat = 0
        }

       ...
}

I previously came across this issue and used the following code to get around it, but Xcode says I cannot decode Doubles from objects any more

        if let v = aDecoder.decodeObject(forKey: "lat") as? Double{//*** -[NSKeyedUnarchiver decodeObjectForKey:] : value for key ( lat ) is not an object. This will become an error in the future.
            lat = v
        }else{
            if aDecoder.containsValue(forKey: "lat") {
                lat = aDecoder.decodeDouble(forKey: "lat")
            }else{
                lat = 0
            }
        }

Here is a crash log:

Exception Type:  EXC_CRASH (SIGABRT)
Exception Codes: 0x0000000000000000, 0x0000000000000000
Exception Note:  EXC_CORPSE_NOTIFY
Triggered by Thread:  0

Last Exception Backtrace:
0   CoreFoundation                  0x18120004c __exceptionPreprocess + 220 (NSException.m:200)
1   libobjc.A.dylib                 0x199874f54 objc_exception_throw + 60 (objc-exception.mm:565)
2   Foundation                      0x182aa8e68 -[NSCoder __failWithException:] + 180 (NSCoder.m:0)
3   Foundation                      0x182aa8fd4 -[NSCoder(Exceptions) __failWithExceptionName:errorCode:format:] + 260 (NSCoder.m:1191)
4   Foundation                      0x182a4689c _decodeDouble + 660 (NSKeyedArchiver.m:0)
5   Foundation                      0x1829bd3cc -[NSKeyedUnarchiver decodeDoubleForKey:] + 172 (NSKeyedArchiver.m:3918)
6   *Project*                       0x102eefb98 specialized Location.init(coder:) + 1936 (Location.swift:145)
7   *Project*                       0x102eed854 init + 4 (<compiler-generated>:0)
8   *Project*                       0x102eed854 @objc Location.init(coder:) + 32
9   Foundation                      0x1829c0268 _decodeObjectBinary + 2560 (NSKeyedArchiver.m:3058)
10  Foundation                      0x1829a4a78 _decodeObject + 180 (NSKeyedArchiver.m:3324)
11  Foundation                      0x1829c4304 -[NSKeyedUnarchiver decodeObjectForKey:] + 176 (NSKeyedArchiver.m:3344)
12  Foundation                      0x182a272b8 +[NSKeyedUnarchiver unarchiveObjectWithData:] + 84 (NSKeyedArchiver.m:2390)
13  *Project*                       0x102ee729c APS.loadOnDeckFromiCloud() + 240 (APS.swift:138)
14  *Project*                       0x102ee7058 APS.().init() + 860 (APS.swift:105)
15  *Project*                       0x102ee6ce8 one-time initialization function for SI + 40 (APS.swift:0)
16  libdispatch.dylib               0x180e72660 _dispatch_client_callout + 20 (object.m:560)
17  libdispatch.dylib               0x180e73f08 _dispatch_once_callout + 32 (once.c:52)
18  *Project*                       0x102f3417c specialized DivertToOnboardingIfNeeded_VC.viewWillAppear(_:) + 1536 (APS.swift:97)
19  *Project*                       0x102f334a8 viewWillAppear + 4 (<compiler-generated>:0)
20  *Project*                       0x102f334a8 @objc DivertToOnboardingIfNeeded_VC.viewWillAppear(_:) + 28
21  UIKitCore                       0x1837ba3e0 -[UIViewController _setViewAppearState:isAnimating:] + 664 (UIViewController.m:5522)
22  UIKitCore                       0x1838e9004 -[UIViewController __viewWillAppear:] + 120 (UIViewController.m:5654)
23  UIKitCore                       0x1838ba5b0 -[UINavigationController _startTransition:fromViewController:toViewController:] + 720 (UINavigationController.m:7329)
24  UIKitCore                       0x183ae657c -[UINavigationController _startDeferredTransitionIfNeeded:] + 876 (UINavigationController.m:7494)
25  UIKitCore                       0x1839bb6ac -[UINavigationController __viewWillLayoutSubviews] + 168 (UINavigationController.m:7806)
26  UIKitCore                       0x1838e20f4 -[UILayoutContainerView layoutSubviews] + 228 (UILayoutContainerView.m:88)
27  UIKitCore                       0x18379aed8 -[UIView(CALayerDelegate) layoutSublayersOfLayer:] + 2620 (UIView.m:18347)
28  QuartzCore                      0x184ef6e24 CA::Layer::layout_if_needed(CA::Transaction*) + 536 (CALayer.mm:10038)
29  QuartzCore                      0x184ee9644 CA::Layer::layout_and_display_if_needed(CA::Transaction*) + 144 (CALayer.mm:2480)
30  QuartzCore                      0x184efdc6c CA::Context::commit_transaction(CA::Transaction*, double, double*) + 524 (CAContextInternal.mm:2586)
31  QuartzCore                      0x184f06560 CA::Transaction::commit() + 680 (CATransactionInternal.mm:449)
32  UIKitCore                       0x183963f9c __34-[UIApplication _firstCommitBlock]_block_invoke_2 + 44 (UIApplication.m:11470)
33  CoreFoundation                  0x1811d9924 __CFRUNLOOP_IS_CALLING_OUT_TO_A_BLOCK__ + 28 (CFRunLoop.c:1820)
34  CoreFoundation                  0x1811da820 __CFRunLoopDoBlocks + 412 (CFRunLoop.c:1862)
35  CoreFoundation                  0x181172808 __CFRunLoopRun + 840 (CFRunLoop.c:2953)
36  CoreFoundation                  0x1811863b8 CFRunLoopRunSpecific + 600 (CFRunLoop.c:3268)
37  GraphicsServices                0x19cb1638c GSEventRunModal + 164 (GSEvent.c:2200)
38  UIKitCore                       0x183b266a8 -[UIApplication _run] + 1100 (UIApplication.m:3493)
39  UIKitCore                       0x1838a57f4 UIApplicationMain + 2092 (UIApplication.m:5046)
40  *Project*                       0x102e93388 main + 68 (MapBox_VC.swift:15)
41  dyld                            0x103169a24 start + 520 (dyldMain.cpp:876)

How do I check the value stored in lat to make sure it is a Double ? (Non optional)

Upvotes: 1

Views: 209

Answers (0)

Related Questions