Это неверно:
// Load your bookmarks (editable array)
NSMutableArray *bookmarks = [[NSMutableArray alloc]initWithCapacity:100]; // OK
NSArray *bookmarksLoaded = [userDefaults arrayForKey:[NSString stringWithFormat: @"favStationForService%@",userSelectedService]];
if (bookmarksLoaded != nil) {
[bookmarks initWithArray:bookmarksLoaded]; // NOT AGAIN
} else {
[bookmarks init]; // NOT AGAIN
}
Не вызывайте метод init
для объекта более одного раза.Я подозреваю, что это источник вашей ошибки, поскольку NSArray / NSMutableArray реализован как «кластер классов», и точный класс, который возвращается initWithCapacity:
, это не NSMutableArray
, а скорее какой-то частный подкласс, который жалуется набудучи посвященным во второй раз.Вот лучший способ сделать то же самое:
// Load your bookmarks (editable array)
NSMutableArray *bookmarks;
NSArray *bookmarksLoaded = [userDefaults arrayForKey:[NSString stringWithFormat: @"favStationForService%@",userSelectedService]];
if (bookmarksLoaded != nil) {
bookmarks = [bookmarksLoaded mutableCopy];
} else {
bookmarks = [[NSMutableArray alloc] initWithCapacity:100];
}
Метод mutableCopy
очень полезен, когда вам нужна изменяемая версия неизменяемого контейнерного объекта.Обратите внимание, что поскольку «copy» находится в имени метода, вы владеете результатом и должны выпустить его позже (если вы не используете ARC или сборщик мусора и вам не нужно об этом беспокоиться).