Frage

Okay, ich weiß, ich bin neu in obj-c, sondern für alle Absichten und Zwecke der unten folgenden scheint, wie es funktionieren soll:

songCollection = [[NSMutableArray alloc] init];
    [songCollection addObject:@"test"];
    //Array is init, and I can see it in the debugger.
    songCollection = [GeneralFunctions getJSONAsArray:@"library"];
    // I can see the expected data in the debugger after this.
    [songCollection retain];
    NSLog(@"%@", [songCollection objectAtIndex:0]);
        // Crashes here due to the array not responding to the selector. Also, the array is now empty.
    //NSLog(@"%@", songCollection);
    NSArray * songList = [songCollection objectAtIndex:1];
    NSLog(@"%@", songList);

Ich hoffe, dass mir hier jemand helfen kann, ich schlug meinen Kopf gegen die Wand!

War es hilfreich?

Lösung

songCollection war ursprünglich ein NSMutableArray, aber dann mit Sie überschrieben es, was von [GeneralFunctions getJSONAsArray:@"library"] zurückgeführt wird. Was auch immer das heißt, es ist wahrscheinlich kein Array.

Übrigens Sie undichte ein Array hier.

Andere Tipps

Hier können Sie den Code auseinander Schritt für Schritt.

songCollection = [[NSMutableArray alloc] init];

Ordnet ein neues leeres NSMutableArray.

[songCollection addObject:@"test"];

Fügt den NSString @ "Test" auf die NSMutableArray Songcollection

songCollection = [GeneralFunctions getJSONAsArray:@"library"];

Wirft Ihren Verweis auf die änderbaren Array entfernen Sie (also undichter Speicher) erstellt und gibt Ihnen einen neuen Zeiger auf etwas, das Sie noch nicht besitzen.

[songCollection retain];

Das ist gut, nehmen Sie den Besitz von Songcollection. Und da dies funktioniert, wissen Sie, dass getJSONAsArray zurück entweder Null oder eine NSObject.

NSLog(@"%@", [songCollection objectAtIndex:0]);
// Crashes here due to the array not responding to the selector. Also, the array is now empty.

So klar ist weder null Songcollection, noch ein NSArray (wandelbar oder nicht). Überprüfen Sie die Dokumentation oder Unterschrift für GeneralFunctions getJSONAsArray und sehen, was es tatsächlich gibt.

//NSLog(@"%@", songCollection);

Was diese Ausgabe hat - das sollte Ihnen sagen, was eigentlich ist Songcollection

.

Angenommen, Sie herausfinden, warum getJSONAsArray nicht eine NSArray Rückkehr, können Sie eine NSArray in eine NSMutableArray mit

konvertieren
songCollection = [[GeneralFunctions getJSONAsArray:@"library"] mutableCopy];
// You now own songCollection

oder

songCollection = [[NSMutableArray alloc] init];
// You now own songCollection
[songCollection addObjectsFromArray:[GeneralFunctions getJSONAsArray:@"library"];

Hat [GeneralFunctions getJSONAsArray: @ "Bibliothek"]? Tatsächlich eine NSArray zurückkehren

Sie vergessen auch Songcollection zu lösen, bevor Sie neu zuweisen es mit dieser Zeile.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top