У меня есть массив, к которому я пытаюсь получить доступ из нескольких классов, используя 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 ответа
Проблема в том, что когда вы это делаете:
favPDFArray = [[NSMutableArray alloc] init];
Он создает новый массив, а это означает, что ничего ранее сохраненного не существует. Когда вы затем устанавливаете значение NSUserDefaults "favouritesArraySaved" для этого массива, он заменяет старый массив этим вновь выделенным.
Это должно быть так:
if (!favPDFArray) favPDFArray = [[NSMutableArray alloc]init];
Таким образом, если «favPDFArray» уже существует, он не перестраивает его.
Я не уверен в функциональности, которую вы пытаетесь достичь здесь, но, конечно, вам не следует использовать здесь NSUserDefaults. Если вы пытаетесь установить глобальный объект, который может быть установлен и получен из нескольких классов, попробуйте использовать одноэлементный класс сеанса. И затем, чтобы убедиться, что данные не стираются, вам нужно просто вставлять или удалять объекты и не нужно каждый раз создавать новый объект.
Здесь лучше подошло бы свойство изменяемого массива для одноэлементного массива.
Но, как упомянул @guenis, пожалуйста, посмотрите, можно ли реализовать функциональность, которую вы пытаетесь достичь, более простым и понятным способом.
Похожие вопросы
Новые вопросы
ios
iOS - мобильная операционная система, работающая на Apple iPhone, iPod touch и iPad. Используйте этот тег [ios] для вопросов, связанных с программированием на платформе iOS. Используйте связанные теги [target-c] и [swift] для проблем, характерных для этих языков программирования.