从 CoreData 实体中的 NSNumber 获取 intValue 时无法识别的选择器崩溃

Posted

技术标签:

【中文标题】从 CoreData 实体中的 NSNumber 获取 intValue 时无法识别的选择器崩溃【英文标题】:Unrecognized selector crash when getting intValue from NSNumber in CoreData entity 【发布时间】:2014-05-01 00:39:24 【问题描述】:

我正在从我的 Core Data 存储中检索一个实体并将其放入一个名为 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] *** 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“-[__NSArrayI intValue]:无法识别的选择器发送到实例 0x8f31080” *** 首先抛出调用堆栈:( 0 核心基础 0x01b5d1e4 __exceptionPreprocess + 180 1 libobjc.A.dylib 0x018dc8e5 objc_exception_throw + 44 2 核心基础 0x01bfa243-[NSObject(NSObject) 不识别选择器:] + 275 3 核心基础 0x01b4d50b ___转发___ + 1019 4 核心基础 0x01b4d0ee _CF_forwarding_prep_0 + 14 5 消息 2 0x000034fd -[ViewController logMensagem] + 1645 6 消息 2 0x00002da0 -[ViewController viewDidLoad] + 112 7 UIKit 0x006bb33d-[UIViewController loadViewIfRequired] + 696 8 UIKit 0x006bb5d9 -[UIViewController 视图] + 35

这就是我设置“惯用语”的方式

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

【问题讨论】:

1) 发布完整的错误。 2)似乎idioma是一个有1个数字的数组,而不是NSNumber 根据问题中的信息,存储在键 @"idioma" 中的任何对象都可能不是 NSNumber 惯用语是一个整数16,必须保存为NSNumber 我建议向我们发布您的存储方式。 1) 把这个放在问题中。 2)发布实际错误。 3) 如果你要问关于 SO 代码的问题,我建议你用英文写代码。 【参考方案1】:

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

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

应该是:

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

【讨论】:

以上是关于从 CoreData 实体中的 NSNumber 获取 intValue 时无法识别的选择器崩溃的主要内容,如果未能解决你的问题,请参考以下文章

CoreData:在一次提取中返回一组与 nsnumber 索引数组匹配的实体

我应该如何对我的核心数据实体中的 NSNumber 属性执行计算/更新?

将 NSNumber* 的 NSArray 存储为 Core Data 中的 NSString

如何区分 CoreData 中的布尔值和 NSNumber

将核心数据中的 NSNumber 转换为 NSString

无法将 NSNumber 存储在核心数据中