2016-09-26 4 views
1

CoreDataの使用についてかなり新しいです。 Iは、関心のポイントに関する情報を座標基本格納クラスを持って、このクラスのコードは:私のデータモデルは目的に適していますか?

import Foundation 
class StopAttributes: NSObject, NSCoding{ 
    var latitude: Double! 
    var longitude: Double! 
    var state: String! 

    func encodeWithCoder(aCoder: NSCoder) { 
     aCoder.encodeDouble(latitude, forKey: "latitude") 
     aCoder.encodeDouble(longitude, forKey: "longitude") 
     aCoder.encodeObject(state, forKey: "state") 
    } 

    required init?(coder aDecoder: NSCoder) { 
     latitude = aDecoder.decodeDoubleForKey("latitude") 
     longitude = aDecoder.decodeDoubleForKey("longitude") 
     state = aDecoder.decodeObjectForKey("state") as! String 
    } 

    override init() { 
     super.init() 

    } 
} 

私は同様に、上述のクラスの配列を有する:また

var unsortedStopsData: [StopAttributes] = [StopAttributes]() 

を、Iこの配列に約3000個のエントリを設定します。私はCoreDataを使用してこの配列を保存したいと思います。私は私の管理オブジェクトクラスのサブクラスを作り、このクラス内StopAttributesの私の配列を保存できるように[StopAttributes]としてunsortedStopsDataをキャスト、

enter image description here

最後に:私はそうのように私のデータモデルを定義しています。 私の質問は、私はデータモデルを正しく設計していますか?もしあなたが私にいくつかアドバイスをお願いしますか?

答えて

1

データモデルが目的に適しているかどうかは、一度保存したデータをどのように使用するかによって異なります。モデルにデータが保存されます。どのようにデータを使用する必要があるかどうかは、別の質問です。

単一の変換可能な属性を使用すると、コアデータでできることはほとんどすべてがすべてのインスタンスをフェッチします。有用な述語を構成することはできないので、データのサブセットをフェッチすることはできません。たとえば、緯度と経度が特定の地域にあるすべてのインスタンスを検索することはできません。インスタンスを名前で検索することはできません。それがあなたのニーズに合っているなら、それは問題ありません。しかし、あなたのニーズが非常に限られている場合、コアデータからほとんど利益を得られません。

データのサブセットを取得する必要がある場合、コアデータエンティティには、少なくともフィルタリングに使用するすべての値の属性が必要です。緯度と経度に基づいてインスタンスを検索しますか?もしそうなら、それらは属性でなければならない。

+0

説明を理解してから、3000値の配列全体を取得せずにStopAttributesの特定のインスタンスを検索できるように、緯​​度、経度、州の属性を追加する必要があります。それは正しい?その場合、関係やフェッチされたプロパティで何かを定義する必要がありますか?私の推測では、取得したプロパティをいくつか追加しています。 –

+0

3つすべてをデータのフィルタリングに使用する必要がある場合(必ずしもすべてを同時に必要とするわけではありません)、はい、すべて3つが必要です。何らかの形でこれに関連する別のエンティティがない限り、関係は必要ありません。フェッチされたプロパティは、おそらく、これまでの要件の記述に基づいて、おそらく必要ありません。 –

関連する問題