我有一个数组,我试图使用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);
}
答案 0 :(得分:1)
问题是当你这样做时:
favPDFArray = [[NSMutableArray alloc] init];
它正在创建一个新数组,这意味着以前存储的任何内容都不存在。然后,当您将NSUserDefaults“favoritesArraySaved”值设置为此数组时,它将使用此新分配的值替换旧值。
应该是这样的:
if (!favPDFArray) favPDFArray = [[NSMutableArray alloc]init];
这样,如果'favPDFArray'已经存在,它就不会重建它。
答案 1 :(得分:0)
我不确定你要在这里实现的功能,但肯定你不应该在这里使用NSUserDefaults。如果您正在尝试设置可以设置的全局对象&从多个类中获取,尝试使用单例会话类。然后为了确保数据不会被清除,您只需要插入或删除对象,而无需每次都实例化一个新对象。
单例数组上的可变数组属性在这里更合适。
但正如@guenis所提到的,请查看您尝试实现的功能是否可以更简单直接的方式完成。