在使用JSONModel解析我的模型时,我发现了这个例外.
NSInvalidArgumentException -[__NSCFString unsignedLongLongValue]: unrecognized selector sent to instance 0x1782210c0
Run Code Online (Sandbox Code Playgroud)
问题发生在里面,JSONModel.m因为它取决于[NSObject setValue:forKey:].
我找到了一种轻松复制它的方法.
@property NSUInteger uintegerProperty;
[...]
[self setValue:@"1" forKey:@"uintegerProperty"];
Run Code Online (Sandbox Code Playgroud)
这工作在32位,因为setValue最终调用longLongVaue定义NSString,但在64位的情况下,它的调用unsignedLongLongValue是未定义的NSString.
在我的特定情况下,问题是enum在模型中使用.
typedef NS_ENUM(NSUInteger, kNotificationTypeEnum)
{
kNotificationTypeResponse = 1,
kNotificationTypeAlert = 2
};
Run Code Online (Sandbox Code Playgroud)
处理这种情况的最佳方法是什么?
堆栈跟踪
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 …Run Code Online (Sandbox Code Playgroud) 我已经更新了应用程序图标资源,但我找不到在Crashlytics/Fabric上反映这一点的方法.
我想用故事板创建一个名为"child"的视图控制器,所以我定义:
- (TyphoonStoryboard *)storyBoard
{
return [TyphoonDefinition withClass:[TyphoonStoryboard class] configuration:^(TyphoonDefinition* definition) {
[definition useInitializer:@selector(storyboardWithName:factory:bundle:) parameters:^(TyphoonMethod *initializer) {
[initializer injectParameterWith:@"Storyboard"];
[initializer injectParameterWith:self];
[initializer injectParameterWith:[NSBundle mainBundle]];
}];
definition.scope = TyphoonScopeSingleton; //Let's make this a singleton
}];
}
- (ChildViewController *)childViewControllerFromStoryboard
{
return [TyphoonDefinition withFactory:self.storyBoard selector:@selector(instantiateInitialViewController)];
}
Run Code Online (Sandbox Code Playgroud)
我将有一个将包含子视图控制器的根视图控制器
- (RootViewController *)rootViewController {
return [TyphoonDefinition withClass:[RootViewController class] configuration:^(TyphoonDefinition *definition) {
[definition useInitializer:@selector(initWithChildViewController:) parameters:^(TyphoonMethod *initializer) {
[initializer injectParameterWith:self.childViewControllerFromStoryboard];
}];
}];
}
Run Code Online (Sandbox Code Playgroud)
最后一部分只是为子视图控制器注入依赖项:
- (ChildViewController *)childViewController {
return [TyphoonDefinition withClass:[ChildViewController class] configuration:^(TyphoonDefinition *definition) {
// Initilization …Run Code Online (Sandbox Code Playgroud)