将 NSNumber 的 NSSet 更改为 int 的 NSSet

Posted

技术标签:

【中文标题】将 NSNumber 的 NSSet 更改为 int 的 NSSet【英文标题】:Change an NSSet of NSNumber into an NSSet of int 【发布时间】:2010-03-11 16:11:58 【问题描述】:

我将数据与核心数据一起使用并获得 NSNumber 的 NSSet...我的问题是如何轻松地将所有对象更改为 int 值?或者我可以直接从数据库中获取 int 值吗?

谢谢

【问题讨论】:

【参考方案1】:

NSSet 不能存储原始值,例如int,这就是使用NSNumber 的原因。通常你可以直接使用NSNumber 而不做任何转换。如果确实需要 int 值,请调用 [mynumber intValue]

【讨论】:

谢谢...我希望有一个直接的解决方案,比如执行选择!【参考方案2】:

这并不能回答您的问题,但它是相关的并且非常有用。

假设我有一个特定类型对象的集合(NSArrayNSSet 等),这些对象有一个名为 displayValue 的方法/属性,它以某种方式将对象转换为更用户友好的对象显示的格式。要将我的对象集合转换为它们的 displayValues 集合,我只需要这样做:

NSArray * objects = ...;
NSArray * objectDisplayValues = [objects valueForKey:@"displayValue"];

唯一需要注意的是,如果 displayValue 返回一个原语(intfloat、结构等),它将被装箱到适当的 NSValue 容器中。

所以理论上你可以这样做:

NSArray * numbers = ...;
NSArray * intValues = [numbers valueForKey:@"intValue"];

但由于 intValue 将被装箱到 NSNumber,所以你会回到你开始的地方。

正如我所说,这并不完全是一个答案,但它非常有用。

【讨论】:

很高兴知道 KVC 既适用于方法名称,也适用于属性名称【参考方案3】:

保持 NSSet 不变。

您可以轻松获取 NSNumber 的 int 值。

int intValue = [myNSNumber intValue];

【讨论】:

以上是关于将 NSNumber 的 NSSet 更改为 int 的 NSSet的主要内容,如果未能解决你的问题,请参考以下文章

将 NSNumber 更改为 Int/Double 后的错误

NSNumber,NSSet等类的内存管理[重复]

iOS开发-OC篇-NSSet,NSNumber

OC07 -- 迭代器/NSNumber/NSValue/NSRange/NSSet/NSDate 及相互转换.(杂)

iOS:跟踪 NSSet 对象的序列

将 UIView 更改为 UIScrollView 后 touchesMoved 不再触发?