Question

D'accord, je sais que je suis nouveau dans obj-c, mais à toutes fins pratiques, voici ce qui suit semble être le suivant:

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);

J'espère que quelqu'un pourra m'aider ici, je me cogne la tête contre le mur!

Était-ce utile?

La solution

songCollection était à l'origine un NSMutableArray, mais vous l'avez ensuite remplacé par tout ce qui est renvoyé par [GeneralFunctions getJSONAsArray: @ " bibliothèque "] . Quoi que ce soit, ce n'est probablement pas un tableau.

Incidemment, vous divulguez un tableau ici.

Autres conseils

Permet de séparer votre code étape par étape.

songCollection = [[NSMutableArray alloc] init];

Alloue un nouveau NSMutableArray vide.

[songCollection addObject:@"test"];

Ajoute le @ NSString @ " test " à la songCollection NSMutableArray

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

Élimine votre référence au tableau mutable que vous avez créé (ce qui entraîne une fuite de mémoire) et vous donne un nouveau pointeur sur quelque chose que vous ne possédez pas encore.

[songCollection retain];

C’est bien, vous prenez possession de songCollection. Et comme cela fonctionne, vous savez que getJSONAsArray a renvoyé la valeur nil ou un objet NSObject.

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

Alors clairement, songCollection n’est ni nul, ni un NSArray (modifiable ou non). Consultez la documentation ou la signature de GeneralFunctions getJSONAsArray et voyez ce qu’elle renvoie réellement.

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

Qu'est-ce que cette sortie - cela devrait vous dire ce qu'est vraiment songCollection?

En supposant que vous compreniez pourquoi getJSONAsArray ne renvoie pas de NSArray, vous pouvez convertir un NSArray en NSMutableArray avec

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

ou

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

Est-ce que [GeneralFunctions getJSONAsArray: @ "" bibliothèque "] renvoie en fait un NSArray?

Vous oubliez également de libérer songCollection avant de le réaffecter à cette ligne.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top