У меня есть массив, к которому я пытаюсь получить доступ из нескольких классов, используя NSUserDefualts. Но когда я NSLog массив, он будет сохранять только по одному. Например, я нажимаю «A», и он сохраняет и печатает «A», но как только я нажимаю «B», он забудет «A» и сохранит только «B». Вот мой код. Дайте мне знать, если у вас есть идеи.

ПЕРВЫЙ КЛАСС

- (IBAction)pressedStarButton:(id)sender {
    if (starBarButton.image == [UIImage imageNamed:@"bookmark_24.png"]) {
        starBarButton.image = [UIImage imageNamed:@"bookmark_add_24.png"];
        [favPDFArray removeObject:cell_title_from_previous];
        NSMutableArray * tempArray = [favPDFArray mutableCopy];
        NSLog(@"You removed Something");

        for (NSString * articleTitle in favPDFArray){
            if ([articleTitle isEqual:cell_title_from_previous])
                [tempArray removeObject: articleTitle];
        }

        favPDFArray = tempArray;
        for(NSArray *subArray in favPDFArray) {
            NSLog(@"Array in myArray: %@",subArray);
        }
    }
    else {
        starBarButton.image = [UIImage imageNamed:@"bookmark_24.png"];
        NSLog(@"You Added Something");

        NSLog(@"%@",cell_title_from_previous);
        favPDFArray = [[NSMutableArray alloc] init];
        [favPDFArray addObject:cell_title_from_previous];
        for(NSArray *subArray in favPDFArray) {
            NSLog(@"Array in myArray: %@",subArray);
        }

        [[NSUserDefaults standardUserDefaults]setObject:favPDFArray forKey:@"favoritesArraySaved"];
        [[NSUserDefaults standardUserDefaults] synchronize];
    }
}

ВТОРОЙ КЛАСС

NSMutableArray *newFavoritesArray = [[NSUserDefaults standardUserDefaults]objectForKey:@"favoritesArraySaved"];

for (NSString * articleTitle in newFavoritesArray){
    NSLog(articleTitle);
}
1
user3397502 9 Мар 2014 в 07:01
2
Не ответ на ваш вопрос, но я думаю, что вы должны найти лучший способ определить состояние ваших кнопок, чем проверка их изображения, в этом случае можно использовать просто предположение starBarButton.selected.
 – 
guenis
9 Мар 2014 в 07:11

2 ответа

Лучший ответ

Проблема в том, что когда вы это делаете:

favPDFArray = [[NSMutableArray alloc] init];

Он создает новый массив, а это означает, что ничего ранее сохраненного не существует. Когда вы затем устанавливаете значение NSUserDefaults "favouritesArraySaved" для этого массива, он заменяет старый массив этим вновь выделенным.

Это должно быть так:

if (!favPDFArray) favPDFArray = [[NSMutableArray alloc]init];

Таким образом, если «favPDFArray» уже существует, он не перестраивает его.

1
Logan 9 Мар 2014 в 07:08
Спасибо! Это имеет смысл, хотя после изменения этой строки ничего не изменилось. Массив по-прежнему хранит только одно значение. Любые идеи? Извините, но я запутался..
 – 
user3397502
15 Мар 2014 в 18:36
Когда вы инициализируете его и добавляете объекты, вы сначала извлекаете его из UserDefaults и добавляете в этот словарь, или вы создаете новый словарь, помещаете в него объект и перезаписываете этот словарь на пользовательские значения по умолчанию?
 – 
Logan
15 Мар 2014 в 18:45

Я не уверен в функциональности, которую вы пытаетесь достичь здесь, но, конечно, вам не следует использовать здесь NSUserDefaults. Если вы пытаетесь установить глобальный объект, который может быть установлен и получен из нескольких классов, попробуйте использовать одноэлементный класс сеанса. И затем, чтобы убедиться, что данные не стираются, вам нужно просто вставлять или удалять объекты и не нужно каждый раз создавать новый объект.

Здесь лучше подошло бы свойство изменяемого массива для одноэлементного массива.

Но, как упомянул @guenis, пожалуйста, посмотрите, можно ли реализовать функциональность, которую вы пытаетесь достичь, более простым и понятным способом.

0
Abhinav 9 Мар 2014 в 07:32