FMDB存储typedef枚举值

时间:2011-12-26 13:55:47

标签: iphone objective-c ios sqlite enums

我正在使用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,我不明白为什么会导致问题。

2 个答案:

答案 0 :(得分:2)

投射不起作用:(int)comp.componentSorting但是转换为NSNumber:[NSNumber numberWithInt:(int)comp.componentSorting]。奇怪的是,我听说过FMDB对于int和NSNumbers很有挑剔。

答案 1 :(得分:0)

我认为你混淆了GDB的一般聪明与枚举的实际价值。是的它是一个整数(或多或少),您是否尝试检查数据库以及使用数据库浏览器插入的值?如果你没有,你也可以尝试通过命令行使用“sqlite3”。