从Core Data实体中的NSNumber获取int值时无法识别的选择器崩溃

时间:2014-05-01 00:39:25

标签: ios objective-c cocoa-touch core-data crash

我正在从我的核心数据存储中检索一个实体并将其放入一个名为fetchedObjects的数组中。我正在尝试从NSNumber获取整数值,但我的应用程序崩溃了。

以下是代码:

 NSNumber *idioma = [fetchedObjects valueForKey:@"idioma"];

如果像这样做NSLog()

  NSLog(@"idioma = %@", idioma);

我得到类似idioma = ( 0 )

的内容

但是,如果我尝试在NSNumber上调用intValue,应用程序崩溃了。这是一个例子:

if ([idioma intValue] > 0 ) {
   //do something
 } else {
   //else do something else
 }

错误消息和堆栈跟踪顶部:

2014-04-30 21:50:15.100 Mensagens 2[18797:60b] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSArrayI intValue]: unrecognized selector sent to instance 0x8f31080'
*** First throw call stack: (
        0   CoreFoundation                      0x01b5d1e4 __exceptionPreprocess + 180
        1   libobjc.A.dylib                     0x018dc8e5 objc_exception_throw + 44
        2   CoreFoundation                      0x01bfa243 -[NSObject(NSObject) doesNotRecognizeSelector:] + 275
        3   CoreFoundation                      0x01b4d50b ___forwarding___ + 1019
        4   CoreFoundation                      0x01b4d0ee _CF_forwarding_prep_0 + 14
        5   Mensagens 2                         0x000034fd -[ViewController logMensagem] + 1645
        6   Mensagens 2                         0x00002da0 -[ViewController viewDidLoad] + 112
        7   UIKit                               0x006bb33d -[UIViewController loadViewIfRequired] + 696
        8   UIKit                               0x006bb5d9 -[UIViewController view] + 35

这就是我设置“idioma”的方式

NSNumber *number = [NSNumber numberWithInteger:lingua]; // lingua is a NSInteger
[entitie setIdioma:number];

The Entitie entitie.h

1 个答案:

答案 0 :(得分:2)

看起来你有一个带有NSNumber的NSArray,但是你试图像NSNumber那样访问它。这一行:

NSNumber *idioma = [fetchedObjects valueForKey:@"idioma"];

应该是:

 NSNumber *idioma = [[fetchedObjects valueForKey:@"idioma"]objectAtIndex:0];