Du bist nicht angemeldet.

1

Freitag, 30. Juli 2010, 15:41

Zufällige auswahl von CoreData Entities via NSSortDescriptor

Hallo,

Ich versuche aus meinem CoreData Stack via NSSortDescriptor 10 zufällige Inhalte aus zu lesen.
Meine Such endet nun damit das es anscheinend nicht möglich ist eine Zuällige auswahl in CoreData aus zu lesen.

Könnt Ihr diese Ansicht teilen oder kennt jemand eine Lösung wie ich mehrere Zufällige Inhalte auslesen kann?

Besten Dank,
floxxxy

2

Samstag, 31. Juli 2010, 09:38

Wie der Name schon sagt ist NSSortDescriptor zum Sortieren, nicht zum Suchen da.
Was Du suchst ist NSFetchRequest, da gibts auch eine Methode -setFetchLimit:

3

Samstag, 31. Juli 2010, 13:46

Könnt Ihr diese Ansicht teilen oder kennt jemand eine Lösung wie ich mehrere Zufällige Inhalte auslesen kann?

Ich schließe mich bezüglich des SortDescriptors Markus an.

Das mit einer Anfrage zu lösen, ist relativ schwierig. Anfragen dieser Art hatte ich vor längerer Zeit in einer relationalen Datenbank ausführen müssen. Ich glaube, damals habe ich das mit Einzelabfragen über Stored-Procedures gelöst. :(

Wenn Deine CoreData-Entities fortlaufend durchnummeriert sind, kannst Du 10 Zufallszahlen bestimmen und einen FetchRequest das Nummerierungsattribut mit dem IN-Operator machen, also beispielsweise

Quellcode

1
[NSPredicate predicateWithFormat:@"id IN %@", theIds];
Das klappt aber nur, wenn die Nummerierung lückenlos ist und alle Zufallszahlen verschieden sind. Ansonsten wirst Du auch Ergebnisse mit weniger als 10 Elementen bekommen.
"Die Komplikation hatte eine Komplikation."

4

Montag, 2. August 2010, 08:45

Ok setFetchLimit: kannte ich schon. Das Problem welches ich hatt war jedoch die Definition wie ich das NSPredicate zu setzten habe.
Da ich leider keine Lückenlose ID Liste habe (es fallen immer mal wieder einträge raus weil ich einen Webserver geschrieben habe welcher die Daten der App abgleicht) muss ich alles auslesen. Anschließend habe ich mir ein Protocoll für NSArray geschrieben welches mir mein komplettes Array Shuffled. Ist das geschehen kann ich einfach die ersten 10 Elemente auslesen.

Hier noch der Code welcher mein Array "Sortiert"

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
- (NSArray *) shuffled {
	
	NSMutableArray *tmpArray = [NSMutableArray arrayWithCapacity:[self count]];
	
	for (id tempObject in self)
	{
		NSUInteger zufaelligePosition = arc4random()%([tmpArray count]+1);
		[tmpArray insertObject:tempObject atIndex:zufaelligePosition];
	}
	
	return [NSArray arrayWithArray:tmpArray];
}

Beiträge: 15 191

Wohnort: Köln

Beruf: Rechtsanwalt

Hobbys: FSK18

  • Private Nachricht senden

5

Montag, 2. August 2010, 11:35

Weil es wiederholt auftaucht: Kategorie, nicht Protokoll. Da bin ich mir ziemlich sicher.
Es hat noch nie etwas gefunzt. Das Buch erscheint zwei Tage, bevor es an dich geliefert wird. To tear down the Wall would be a Werror!