SwiftのCoreDataでInt64を使うときに気をつける事.

こんにちは,よしむらです.
春らしくなってきたかと思うと,急に寒くなりましたね.
アイキャッチ写真は,先日立ち寄った道の駅のチョークアートです.春っぽい

 

さて,個人的にswiftでコーディングしていて馴染めない点の1つが,整数型の厳密さだったりします.(次点は,関数引き渡しの第二引数からは変数名を入力する必要がある点)

特に,DataCoreでは,テーブルレイアウトを決定する時点で,Int16,Int32,Int64を明確に定義する必要があります.

因みに,Playgroundでそれぞれの型の制限を調べてところ,下記の様になりました.

スクリーンショット 2015-03-11 16.22.39

Int16は,2の15乗で32,767にプラスマイナスの為に1byteを足して全部で16byte.
Int32も,2の31乗にプラスマイナスの1byteで全部で32bytr.だからInt32ですね.

因みに,swiftのInt型はInt64と限界値は同じみたいです.

さて今回ハマったのは,DataCoreの検索式を入れる部分. 

テーブルレイアウト上では,item_idはInt64で定義してあります.
その際に,itemDtoのitemId(Int型)で値を渡しても,検索がヒットせずにハマりました.

誤)let predicate = NSPredicate(format: “%K = %d” , “item_id”, itemDto.itemId
正)let predicate = NSPredicate(format: “%K = %ld” , “item_id”, itemDto.itemId

20歳でC言語を初めて触って依頼,冷静に考えれば当たり前といえば当たり前.
JavaとかJavaScriptを書いてるとそういうことは意識しないので,懐かしい気分になった今日このごろです.

あとInt16の型に32,767を超える値を入れると,余裕で桁あふれした数字になるので注意が必要ですね.エラー処理がいるかも.

 

こちらもどうぞ

swiftのversionを1.2にあげたらCoreDataのInt64がエラーだらけになった件


Add a Comment

メールアドレスが公開されることはありません。