Вопрос

хорошо, я знаю, что я новичок в obj-c, но по сути, следующее ниже, похоже, должно сработать:

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

Я надеюсь, что кто-нибудь сможет мне здесь помочь, но я бьюсь головой о стену!

Это было полезно?

Решение

songCollection изначально был NSMutableArray, но затем вы перезаписали его тем, что возвращается из [GeneralFunctions getJSONAsArray: @ " library "] . Что бы это ни было, это, вероятно, не массив.

Кстати, здесь вы пропускаете массив.

Другие советы

Давайте разберем ваш код шаг за шагом.

songCollection = [[NSMutableArray alloc] init];

Выделяет новый пустой NSMutableArray.

[songCollection addObject:@"test"];

Добавляет NSString @"test" в коллекцию песен NSMutableArray

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

Отбрасывает вашу ссылку на созданный вами изменяемый массив (таким образом, происходит утечка памяти) и дает вам новый указатель на то, чем вы еще не владеете.

[songCollection retain];

Это хорошо, ты становишься владельцем songCollection.И поскольку это работает, вы знаете, что getJSONAsArray вернул либо nil, либо NSObject .

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

Таким образом, очевидно, что songCollection не является ни nil, ни NSArray (изменяемым или иным).Проверьте документацию или подпись для GeneralFunctions getJSONAsArray и посмотрите, что он на самом деле возвращает.

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

Что дает этот вывод - это должно сказать вам, что такое songCollection на самом деле.

Предполагая, что вы выяснили, почему getJSONAsArray не возвращает NSArray, вы можете преобразовать NSArray в NSMutableArray с помощью

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

или

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

Действительно ли [GeneralFunctions getJSONAsArray: @ " библиотека "] действительно возвращает NSArray?

Вы также забыли выпустить songCollection, прежде чем переназначить ее с этой строкой.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top