2016-11-23 9 views
0

私はInt16属性を持つエンティティを持っています。Intをコアデータに保存する正しい方法はありますか?

@IBAction func userRepsStepper(_ sender: UIStepper) { 
    userExerciseRepsCounter.text = Int(sender.value).description 
    self.userRepsCount = Int(sender.value) 
} 

私はしかし、私は取得するには、属性にこれを追加すると、そうするuserExercise.reps = userRepsCountを使用しています:私は以下のステッパ方式で設定されているvar userRepsCount = Int()を保存する

enter image description here

エラー

'Int16型' をタイプするタイプ 'int型の値を割り当てることができません

私はInt16がこのようなintのものを問題なく保存できるという印象を受けましたか?私はここで何が欠けていますか?

+0

強制的にInt16(valueHere)としてラップしようとしましたか? –

+0

swift suggest userExercise.reps = Int16(userRepsCount)しかし、Intを保存するためにこれをやっているelsesコードを見た人はいません。 – infernouk

+0

Int16として保存されている場合は、それをラップする必要がありますXcodeのように示唆している。それから、引っ張る必要があるときはいつも、Int(stuff)で包む必要があります。そうすれば、あなたはそれを普通に使うことができます。おそらく、アップルはストアの値をIntからInt16に変更しています。チュートリアルはそのアップデートの直前です。 Swiftのアップデートは多くのものを変えます。 –

答えて

1

は、無効な値のリスクなしにあなた下位16ビットの32ビットからすることはできません意気消沈整数

+0

これは動作しません - 下記の@ SkipMia2w3の答えをご覧ください。 むしろそれをInt32としてDBに格納します。 –

+0

@KarolyNyisztor私が知っているように、あなたが下で見るように、我々はそれについて議論しました。私は自分の答えを更新するのを忘れました、それは今更新されました。 –

+0

DB内の属性がInt16型であるため、これは機能しません。 OPは、問題を解決するためにエンティティタイプをInt32に更新する必要があります。 –

1

あなたがそれを処理する前Int(value)でそれをラップし、あなたがそれを引くときにInt64(userRepsCount)とそれを包む試してみてください、と。あなたは値を保持するためだけに上に行くことができます。 (IEは16から32または64まで)。絶対に必要な場合は、Int16(value)を使用してキャストできます。

代わりにint16の代わりにCoreData Integer 32での使用をお勧めします。あなたがしていることのためにパフォーマンス/ストレージに明白な/目立った違いを作りません。

+0

コアデータに直線の 'Int'値オプションがありませんか?キストint16 int32とint64? – infernouk

+1

Int64を使用します。あなたはしない理由はありません。 –

+0

Int32またはInt64を使用するのが最良だと言いたいのですが、それはあなたの選択です。唯一の違いは、Int64がより高い数値を保持できることです。 –

関連する問題