While using JSONModel to parse my models I found this Exception.
NSInvalidArgumentException -[__NSCFString unsignedLongLongValue]: unrecognized selector sent to instance 0x1782210c0
The problem got place inside JSONModel.m because it depends on [NSObject setValue:forKey:].
I found a way to easily reproducing it.
@property NSUInteger uintegerProperty;
[...]
[self setValue:@"1" forKey:@"uintegerProperty"];
This works on 32 bits because setValue ends up calling longLongVaue defined in NSString, but in the case of 64 bits it's calling unsignedLongLongValue which is undefined in NSString.
In my particular case, the problem is this enum used in a model.
typedef NS_ENUM(NSUInteger, kNotificationTypeEnum)
{
kNotificationTypeResponse = 1,
kNotificationTypeAlert = 2
};
What is the best way to handle this situation?
Stack trace
2014-12-31 17:48:43.789 mobile-iOS[17851:613] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFConstantString unsignedLongLongValue]: unrecognized selector sent to instance 0x10f1feeb0'
*** First throw call stack:
(
0 CoreFoundation 0x0000000111b99495 __exceptionPreprocess + 165
1 libobjc.A.dylib 0x00000001118f099e objc_exception_throw + 43
2 CoreFoundation 0x0000000111c2a65d -[NSObject(NSObject) doesNotRecognizeSelector:] + 205
3 CoreFoundation 0x0000000111b8ad8d ___forwarding___ + 973
4 CoreFoundation 0x0000000111b8a938 _CF_forwarding_prep_0 + 120
5 Foundation 0x000000010ff2449b _NSSetUnsignedLongLongValueForKeyWithMethod + 63
6 Foundation 0x000000010fed5530 -[NSObject(NSKeyValueCoding) setValue:forKey:] + 259
7 mobile-iOS 0x000000010ee1834c -[AppDelegate application:didFinishLaunchingWithOptions:] + 140
8 UIKit 0x000000011051b3d9 -[UIApplication _handleDelegateCallbacksWithOptions:isSuspended:restoreState:] + 264
9 UIKit 0x000000011051bbe1 -[UIApplication _callInitializationDelegatesForURL:payload:suspended:] + 1605
10 UIKit 0x000000011051fa0c -[UIApplication _runWithURL:payload:launchOrientation:statusBarStyle:statusBarHidden:] + 660
11 UIKit 0x0000000110530d4c -[UIApplication handleEvent:withNewEvent:] + 3189
12 UIKit 0x0000000110531216 -[UIApplication sendEvent:] + 79
13 mobile-iOS 0x000000010eedf48b -[MMApplication sendEvent:] + 331
14 UIKit 0x0000000110521086 _UIApplicationHandleEvent + 578
15 GraphicsServices 0x0000000112df671a _PurpleEventCallback + 762
16 GraphicsServices 0x0000000112df61e1 PurpleEventCallback + 35
17 CoreFoundation 0x0000000111b1b679 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ + 41
18 CoreFoundation 0x0000000111b1b44e __CFRunLoopDoSource1 + 478
19 CoreFoundation 0x0000000111b44903 __CFRunLoopRun + 1939
20 CoreFoundation 0x0000000111b43d83 CFRunLoopRunSpecific + 467
21 UIKit 0x000000011051f2e1 -[UIApplication _run] + 609
22 UIKit 0x0000000110520e33 UIApplicationMain + 1010
23 mobile-iOS 0x000000010ee2af23 main + 243
24 libdyld.dylib 0x000000011230b5c9 start + 1
)
libc++abi.dylib: terminating with uncaught exception of type NSException
Signal: 6 (signal SIGABRT)
The easiest way is probably to just use a shorter integer type for the property, like uint32_t. The second easiest would be to add a category on NSString that provides the missing method.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With