NSUserDefaults只保存数组中的一个元素

时间:2014-03-09 03:01:38

标签: ios objective-c arrays

我有一个数组,我试图使用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);
}

2 个答案:

答案 0 :(得分:1)

问题是当你这样做时:

favPDFArray = [[NSMutableArray alloc] init];

它正在创建一个新数组,这意味着以前存储的任何内容都不存在。然后,当您将NSUserDefaults“favoritesArraySaved”值设置为此数组时,它将使用此新分配的值替换旧值。

应该是这样的:

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

这样,如果'favPDFArray'已经存在,它就不会重建它。

答案 1 :(得分:0)

我不确定你要在这里实现的功能,但肯定你不应该在这里使用NSUserDefaults。如果您正在尝试设置可以设置的全局对象&从多个类中获取,尝试使用单例会话类。然后为了确保数据不会被清除,您只需要插入或删除对象,而无需每次都实例化一个新对象。

单例数组上的可变数组属性在这里更合适。

但正如@guenis所提到的,请查看您尝试实现的功能是否可以更简单直接的方式完成。