Zufällige auswahl von Core Data Entities via NSSortDescriptor

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Zufällige auswahl von Core Data 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
  • floxxy schrieb:

    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.
    „Meine Komplikation hatte eine Komplikation.“
  • 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. - (NSArray *) shuffled {
    2. NSMutableArray *tmpArray = [NSMutableArray arrayWithCapacity:[self count]];
    3. for (id tempObject in self)
    4. {
    5. NSUInteger zufaelligePosition = arc4random()%([tmpArray count]+1);
    6. [tmpArray insertObject:tempObject atIndex:zufaelligePosition];
    7. }
    8. return [NSArray arrayWithArray:tmpArray];
    9. }
    Alles anzeigen