2013-04-25 7 views
9

私はdateTimevalueのプロパティを持つ株価のリストを持っています。注文セットとコアデータ(NSOrderedSet)

現在ソートディスクリプタを使用して株価を取得する際に株価をソートしています。

今、私は自分のコードを変更し、それらをすでにソートされた順番で保存して、最新の株価(dateTime = max)をより早く取得したいと思います。

私はどのように私は右dateTimeにソート記述子を使用してそれらを挿入した後に株価を並べ替えることができます

SharePrice *priceItem= [NSEntityDescription insertNewObjectForEntityForName:@"SharePrice" inManagedObjectContext:context];

を使用して株価を一つずつ挿入するのですか?

NSMutableOrderedSetに変換し、sortUsingComparator:を使用する必要がありますか?

ありがとうございました!

答えて

21

Ordered property on CoreData

マークあなたのCoreDataのモデルであなたの財産の順序付けられたチェックボックスをオンにします。

また、AppDelegate(PersistentStoreの作成時にオプションディクショナリ)にCoreData自動移行を設定してください。このようにして、CoreDataはデータを失うことなくこの変更を行うことができます。

+1

データベース内の既存の順序集合をどのように並べ替えることができますか? – AlexR

+0

私はあなたがそれを自動的に行うことはできないと思います。順序や日付などの基準に基づいて注文する機能を作成することができます。 CoreDataモデルで 'NSSet'を' NSArray'に変更した場合、以前は注文していなかったと仮定して、古いNSSetから "allObjects"を取得して配列に追加します。 –

0

NSMutableOrderedSetを使用すると、基礎となるsqliteデータベースにどのような影響があるかわかりません。それはセットの順序でそれを格納すると思うのはいいですが、基本的な実装はブラックボックスであり、まったく動作しても、それが一貫して動作するという保証はないと私は考えます。

あなたが探しているパフォーマンスが得意なら、その属性にインデックスを追加するのが最良のアプローチだと思います。

+0

を選択した後NSOrderedSetに変更する必要があり、受け入れ答えに追加したいと思い、MySQLはソートに影響するクラスタ化インデックスを(サポートしていますディスク)。私はそれがCoreDataで公開されているかどうかはわかりませんが、それはあなたが調べることができるものです。 –

+0

私は属性をインデックス化し、各フェッチでソートを行います。しかし、私はパフォーマンスを改善する必要があり、ソート順に項目を保存したいと思います。 – AlexR

+8

ここでMySQLと何が関係していますか? –

3

私はあなたがNSSetを持っている場合、それはそうは言って注文したチェックボックス

+0

ありがとう、これはNSOrderedSetへの変更についての詳細ですが、私がここに来たのです。 –