2011-12-26 9 views
1

FMDBを使用してオブジェクトをデータベースにシリアル化していますが、enum値を格納したいnull不可能なint列があります。FMDB typedef enum値を格納する

Person.h私は別のクラスでComponentSortingを宣言してい

@interface TreasureChest : NSObject { 
     ... 
    ComponentSorting componentSorting; 
} 
@property (nonatomic, readwrite) ComponentSorting componentSorting; 
@end 

:私は値を挿入しようとすると

Constants.h

typedef enum ComponentSorting { 
    kSortOrderName = 0, 
    kSortOrderSortOrder = 1, 
} ComponentSorting; 

次の文は、私は "列ComponentSortingはNULLにすることはできません"エラー、それはFMDBまたはSQLiteのiOS実装のいずれかがenumを無視しています。

[db executeUpdate:@"INSERT INTO Components (ComponentID, Name, Description, ComponentSorting) VALUES (?,?,?,?)", 
     comp.componentId, 
     comp.name, 
     comp.description, 
     comp.componentSorting 
     ] 

デバッグcomp.componentSortingが実際kSortOrderName(オブジェクトのinitで設定)であることを示しています。 .NETの背景から来て、enumはintに変換可能ですが、なぜこの問題が発生するのかわかりません。

答えて

0

私はあなたがGDBの一般的な巧妙さをenumの実際の値と混同していると思います。はい、それは整数です(多かれ少なかれ)、データベースとデータベースブラウザで挿入した値をチェックしてみましたか?あなたが持っていない場合は、コマンドラインから "sqlite3"を使ってみることもできます。

+0

問題は、NULL値のために挿入が失敗することです。 '? 'を' 0'に置き換えると成功しますが、それは解決策ではありません。 – Echilon

+0

整数にキャストしようとしましたか? –

+0

ありがとう、それは部分的にそれでした(私の答えを見てください)。 – Echilon

2

キャスティングが機能しませんでした:(int)comp.componentSortingしかし、NSNumberに変換しました:[NSNumber numberWithInt:(int)comp.componentSorting]。奇妙なことに、私はFMDBがintとNSNumberについて気になると聞いています。

関連する問題