Objekte aus SBElementArray bzw. NSMutableArray entfernen

  • Objekte aus SBElementArray bzw. NSMutableArray entfernen

    Hallo Leute,

    ich stehe vor folgendem Problem. In einem Array lege ich Zeiger auf diverse iTunesTrack-Objekte ab
    (ich greife ueber die Scripting Bridge auf iTunes zu). Diese Objekte moechte ich nun aus der Library loeschen, was
    ich folgendermassen mache ([item originalTrack] enthaelt dabei den iTunesTrack, der entfernt werden soll):

    Quellcode

    1. for (iTunesPlaylist *pl in [librarySource libraryPlaylists]){
    2. NSLog(@"%d", [[item originalTrack] databaseID]);
    3. [[pl tracks] removeObject:[item originalTrack]];
    4. }



    Das Problem scheint aber nun folgendes zu sein: Die Items werden ja nacheinander geloscht und dabei aendern
    sich die anderen Trackobjekte anscheinend, sodass in databaseID irgendwann nur noch 0 steht. Das hat zur
    Folge, dass nicht alle Tracks aus meinem Array geloescht werden.

    Hat irgendjemand eine Idee, was man da tun koennte? Theoretisch muesste man alle Objekte auf einmal loeschen,
    sodass die anderen keine Chance haben, sich zu veraendern. Aber wie?

    Vielen Dank schonmal,
    Martin
  • Nachtrag: Ich habe mir mal selbst ein paar Gedanken gemacht und bin dabei
    zu folgenden (suboptimalen?) Ergebnissen gekommen.

    1. Alle Tracks jedes Mal in einer Schleife durchlaufen und die persistentId,
    die ich zuvor statisch gespeichert habe ueberpruefen (laaaaaaangsam!)

    Quellcode

    1. for (iTunesTrack *track in [pl tracks]) { if ([[track persistentID] isEqualTo:[item persistentId]]) [[pl tracks] removeObject:track]; }



    2. Ich habe ueberlegt, ob folgende Loesung nicht schneller waere als Nr. 1

    Quellcode

    1. NSArray *result = [[pl tracks] filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"persistentID == %@", [item persistentId]]];
    2. NSLog(@"%@", [result objectAtIndex:0]);
    3. [[pl tracks] removeObject:[result objectAtIndex:0]];



    In result stehen dann auch die zu loeschenden Tracks drin, aber das removeObject bleibt ohne Wirkung, d.h.
    es wird nichts geloescht (raetselhaft oder bin ich einfach nur doof?)