我正在使用FMDB将对象序列化为数据库,我有一个不可为空的int列,我想在其中存储枚举值。
Person.h
@interface TreasureChest : NSObject {
...
ComponentSorting componentSorting;
}
@property (nonatomic, readwrite) ComponentSorting componentSorting;
@end
我在另一个班级中声明ComponentSorting
:
Constants.h
typedef enum ComponentSorting {
kSortOrderName = 0,
kSortOrderSortOrder = 1,
} ComponentSorting;
当我尝试在以下语句中插入值时,我得到一个“列ComponentSorting不能为NULL”错误,就好像FMDB或SQLite的iOS实现忽略了枚举。
[db executeUpdate:@"INSERT INTO Components (ComponentID, Name, Description, ComponentSorting) VALUES (?,?,?,?)",
comp.componentId,
comp.name,
comp.description,
comp.componentSorting
]
调试显示comp.componentSorting
确实是kSortOrderName
(在对象的init
中设置)。来自.NET背景,枚举几乎可以转换为int,我不明白为什么会导致问题。
答案 0 :(得分:2)
投射不起作用:(int)comp.componentSorting
但是转换为NSNumber:[NSNumber numberWithInt:(int)comp.componentSorting]
。奇怪的是,我听说过FMDB对于int和NSNumbers很有挑剔。
答案 1 :(得分:0)
我认为你混淆了GDB的一般聪明与枚举的实际价值。是的它是一个整数(或多或少),您是否尝试检查数据库以及使用数据库浏览器插入的值?如果你没有,你也可以尝试通过命令行使用“sqlite3”。