【问题标题】:NSNumber * to NSString * from CoreDataNSNumber * 到 NSString * 从 CoreData
【发布时间】:2017-01-03 22:09:07
【问题描述】:

我目前有一个来自 CoreData 的对象 NSArray - 其中一个属性(名为 identifier)是一个 NSNumber。我正在我的代码中进行一些比较,需要将此NSNumber 转换为NSString。

我已经让这个工作了,但是我想知道这两段代码之间的区别是什么:

NSNumber * arrayValueNum = [coreArray[i] identifier];
NSString * arrayValue = [arrayValueNum stringValue];

和

NSString * test = [[coreArray[i] identifier] stringValue];

由于某种原因,第二个 sn-p 不会编译,而第一个会。

错误:

“NSString”没有可见的@interface 声明选择器“stringValue”

除了 NSNumber * 值在大括号中而不是在它自己的变量中之外,它们不一样吗?

【问题讨论】:

  • 快速问题:在第二个 sn-p 上identifier 使用什么方法(如果您 alt+单击它)?我想,[[(MyCoreDataClass*)coreArray[i] identifier] stringValue] 可能会起作用,或者[(NSNumber *)[coreArray[i] identifier] stringValue] 也可以。问题是 coreArray[i] 返回一个 id 对象,并且有一些对象具有一个属性/方法 identifier 返回一个 NSString 这可以解释错误。

标签: ios objective-c core-data nsstring nsnumber


【解决方案1】:

您可以像这样使用stringWithFormat 直接为NSString 变量赋值。

NSString *test = [NSString stringWithFormat:@"%@",[coreArray[i] identifier]];

【讨论】:

  • 这会导致使用[test isEqualToString] - [__NSCFNumber isEqualToString:]: unrecognized selector sent to instance时出错
猜你喜欢
  • 2013-03-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-05
相关资源
最近更新 更多