从 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 属性执行计算/更新?