FMDB Сохранение значений перечислений typedef - PullRequest
1 голос
/ 26 декабря 2011

Я использую 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 column not 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, перечисления в значительной степени конвертируются в целые, поэтому я не понимаю, почему это вызывает проблемы.

Ответы [ 2 ]

2 голосов
/ 26 декабря 2011

Приведение не сработало: (int)comp.componentSorting, но преобразование в NSNumber выполнено: [NSNumber numberWithInt:(int)comp.componentSorting].Как ни странно, я слышал, что FMDB может быть разборчив в отношении int и NSNumbers.

0 голосов
/ 26 декабря 2011

Я думаю, что вы путаете общий ум GDB с фактическим значением перечисления.Да, это целое число (более или менее). Вы пытались проверить базу данных и значения, которые вы вставили в браузер базы данных?Если у вас его нет, вы также можете попробовать использовать «sqlite3» через командную строку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...