2016-09-05 7 views
7

私はコアデータを初めて使用しましたが、私の新しいプロジェクトでは、データをコアデータに保存したいと思います。 いくつかのカスタムクラス配列を含むReptileクラスを作成したいと思います。コアデータがなければ、私は次のようなものを持っています:Swift:コアデータにカスタムクラスの配列を格納

import Foundation 
import UIKit 

class Reptile_ { 

    private var _name: String? 
    private var _dateOfBirth: String? 
    private var _morph: String? 
    private var _breed: String? 
    private var _feedingPeriodInDays: Int? 
    private var _reminderTime: NSDate? 
    private var _idealTemperatureAtDay: String? 
    private var _idealTemperatureAtNight: String? 
    private var _gender: Gender? 
    private var _image: UIImage? 
    private var _imageHeader: UIImage? 

    private var _sheddings: [Shedding_]? 
    private var _feedings: [Feeding_]? 
    private var _defecations: [Defecation_]? 
    private var _weights: [Weight_]? 
    private var _lengths: [Length_]? 
    private var _others: [Others_]? 

} 

クラスWeight_は、次のようになります。

import Foundation 

class Weight_ { 

    private var _date: NSDate? 
    private var _weight: Double? 

} 

私は文字列、ブールデータ、などいくつかの属性を持つ単一のクラスを保存するためにコアデータを使用することができます...しかし、私は、私はの配列を救う方法がわかりませんカスタムオブジェクト?

私は、ベースReptileクラスでリレーションシップ(1対多)を作成する必要があるとお読みになりました。だから私は、このをもたらしたことをやった:

enter image description here

が、これは、カスタムオブジェクトの配列を追加するための正しい方法は何ですか?その場合は、どうすればいいですか(単に「CreateNSManagedObject Subclass ...」をクリックしてください)?インスタンスを配列に追加するにはどうすればよいですか?どのように私はそれを読むのですか?

答えて

3

コアデータのカスタム配列を持つことは、それらのアイテムのコアデータオブジェクトを作成し、投稿したグラフで行ったのと同じようにリレーションシップを介してそれらを接続することになります。

どうすればいいですか(「Create NSManagedObject Subclass ...」をクリックするだけです)?

これでオブジェクトグラフが作成されました。次のステップは、Xcode 7またはXcode 8のどちらがあるかによって大きく異なります。前者の場合は、サブクラスの作成ボタンをクリックします。その後、データモデルに何か変更があった場合は、サブクラスを再生成する必要があります。

しかし、後者(Xcode 8)では、コアデータオブジェクトモデルファイルでエンティティが選択されたときに属性インスペクタの[Codegen]ドロップダウンを見るだけで済みます。 "Class Definition"を選択すると、Xcode 8がクラスを生成するはずです。 「カテゴリ/拡張」とは、コアデータアクセスに必要なすべてのコードを含む拡張を作成することを意味し、実際のクラス定義を宣言する必要があります。いずれの場合も(Xcode 8)、これらはオブジェクトモデルを変更すると自動的に更新されます(現在は再構築後にのみ表示され、表示されません)。私はそれを読んでどうすればよいCore Data WWDC16 session

Xcode 8

から

画像?

reptileInstance.lengths.allObjects as! [Length] 

私はインスタンスを追加するにはどうすればよい:あなたはコアデータに順序を設定していない、それはNSSetとして戻ってくるだろうが、あなたは配列に変換すると仮定すると、

アレイに?

あなたはのような単純な何かをすることができ、次のいずれかlengthInstanceが自動的reptileInstancelengthsコレクションプロパティに追加されます、またはあなたがreptileInstancelengthsに新しいNSSetを設定することができ

lengthInstance.reptile = reptileInstance 

その場合に。

これは非常に簡単な説明です。 Core Data Programming Guideをチェックアウトする必要がありますが、今後のXcode 8で更新される場合とされない場合があります。

+0

素晴らしい返信をいただきありがとうございます!これは本当に私を助けました。 –