如何创建包含NSNumber的枚举? 我的应用程序中有一个coredata持久性,一个实体在coredata中声明为Integer 16的status属性,这意味着它是一个NSNumber
我希望能够声明我的枚举以包含NSNumber而不是int,所以我可以使用它们而不必编写这个可怕的东西
enum {
ERROR,
INCOMPLETE,
OK
} EventStatus;
[myObjectOnCoredata setStatus: [[NSNumber alloc] initWithInt:INCOMPLETE]];
而且只是:
[muObjectOnCoredata setStatus: INCOMPLETE];
我认为应该可以,因为我可以将枚举声明为NSInteger,但它对我来说仍然不好
感谢您的帮助
答案 0 :(得分:18)
自去年WWDC以来,您可以使用盒装表达式来创建NSNumbers:
@(INCOMPLETE) // Equals to [NSNumber numberWithInt:INCOMPLETE]
另见:http://clang.llvm.org/docs/ObjectiveCLiterals.html
有一次它表示它在任何Apple编译器中都不可用,但现在Clang是自3.2版以来支持此版本的默认版本
或者在NSManagedObject的子类中添加一个方法,使用enum EventStatus
创建一个数字并调用原始方法
答案 1 :(得分:12)
将托管对象的状态命名为statusNumber
。
然后
@dynamic statusNumber
- (void)setStatus:(EventStatus)status {
self.statusNumber = [[NSNumber alloc] initWithInt:status]];
}
- (EventStatus)status {
return [self.statusNumber intValue];
}
只需将转化隐藏到您的实施中。
答案 2 :(得分:0)
枚举无法容纳对象。只有整数类型。 您可以使用@或@()轻松地装入值,但请注意它是什么类型的整数类型,以便正确收件箱。 它可以是任何有符号或无符号整数类型。由于使用不同的长度或符号进行隐式转换,未能正确取消打包可能会导致意外溢出。 尽管许多枚举使用从零开始的默认隐式值,但这并不能保证。
因此,检查枚举定义并选择正确的NSNumber方法,例如int的intValue。