2013-04-25 25 views
9

Mam listę cen akcji o właściwościach dateTime i value.Zamówione zestawy i podstawowe dane (NSOrderedSet)

Obecnie sortuję ceny akcji podczas ich pobierania przy użyciu deskryptora sortowania.

Teraz chciałbym zmienić mój kod i zapisać je w już posortowanej kolejności, aby szybciej pobrać najbardziej aktualną cenę akcji (dateTime = max).

ja wkładając cen akcji jeden po drugim używając

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

Jak mogę posortować cen akcji tuż po włożeniu ich użyciu deskryptor sortowania na dateTime?

Czy muszę przekonwertować go na NSMutableOrderedSet i użyć sortUsingComparator:?

Dziękujemy!

Odpowiedz

21

Ordered property on CoreData

Mark zamówionej pole od nieruchomości w modelu CoreData.

Należy również ustawić automatyczną migrację CoreData w AppDelegate (słownik opcji podczas tworzenia PersistentStore). W ten sposób CoreData będzie w stanie dokonać tej zmiany bez utraty danych.

+1

Jak zmienić kolejność istniejącego uporządkowanego zestawu w bazie danych? – AlexR

+0

Myślę, że nie możesz tego zrobić automatycznie. Możesz wykonać funkcję na zamówienie w oparciu o pewne kryteria, takie jak kolejność lub data. Jeśli zmienisz 'NSSet' na' NSArray' w swoim Modelu CoreData, zakładam, że wcześniej nie miałeś zamówienia, więc otrzymasz "allObjects" ze starego 'NSSet' i dodasz go do swojej tablicy. –

0

Nie jestem pewien, w jaki sposób użycie NSMutableOrderedSet wpłynęłoby na bazę danych sqlite. Miło jest pomyśleć, że będzie on przechowywany w porządku zestawu, ale podstawową implementacją jest blackbox i nie sądzę, że istnieje gwarancja, że ​​będzie działał konsekwentnie, jeśli w ogóle zadziała.

Jeśli chodzi o wzrost wydajności, którego szukasz, myślę, że dodanie indeksu do tego atrybutu byłoby najlepszym rozwiązaniem.

+0

Z powiedział, że MySQL nie obsługuje skupionych indeksów (co wpływa na porządek na dysk). Nie jestem pewien, czy jest on ujawniony w CoreData, ale jest to coś, na co można popatrzeć. –

+0

Mam atrybut indeksowany i sortuję przy każdym pobieraniu. Jednak muszę poprawić wydajność i chciałbym przechowywać elementy w posortowanej kolejności. – AlexR

+8

Co MySQL ma z tym wszystkim wspólnego? –

3

chciałbym dodać do przyjętej odpowiedź, jeśli masz NSSet, musi ona zostać zmieniona na NSOrderedSet po wybraniu uporządkowaną wyboru

+0

Dzięki, to jest szczegół o zmianie do NSOrderedSet jest to, co przyjechałem tutaj, aby znaleźć. –