У меня есть функция addToFavourites, которая вызывает ошибку EXC_BAD_ACCESS. В принципе, у меня есть View View Controller со списком всех фаворитов, которые пользователь добавил ранее, теперь, когда вы нажимаете на одного из фаворитов, он подталкивает представление к detailViewController, это отлично работает. На контроллере подробных представлений у меня есть кнопка добавления в избранное, эта кнопка изменяет на удаление из избранного, если обнаруживает, что ключ уже существует в словаре addToFavourites. Проблема возникает, когда пользователь обращается к этому detailViewController со страницы избранных страниц, а также с главной страницы, в которой перечислены все подробные элементы. Они могут это сделать, поскольку у меня есть панель вкладок.EXC_BAD_ACCESS при запуске функции addToFavourites
Так что скажите, что я нахожусь в detailView, доступ к которому осуществляется через страницу избранных, кнопка избранного имеет «удалить из избранного», это правильно. Но затем скажем, что я нажму кнопку «Удалить из избранного», кнопка изменится на «добавить в избранное» и удалит ее из словаря. Пока все работает нормально. Теперь, когда я перехожу к тому же detailView, но на этот раз доступ с другой вкладки на панели вкладок, во-первых, кнопка «Избранное» все еще читает «удалить из избранного», и когда я впервые нажимаю эту кнопку, она изменяется на «добавить к избранное ", а затем, когда я нажму снова, я получаю эту ошибку EXC_BAD_ACCESS.
Вот addToFavouritesFunction:
- (IBAction)addToFavourites:(id)sender {
NSString *type = [[NSUserDefaults standardUserDefaults]objectForKey:@"type"];
if(type == @"v") {
NSString *area = [[NSUserDefaults standardUserDefaults]objectForKey:@"area"];
NSString *ID1 = [[NSUserDefaults standardUserDefaults]objectForKey:@"ID1"];
if([[addToFavouritesDictionary allKeys] containsObject:ID1]) {
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *filePath = [documentsDirectory stringByAppendingPathComponent:@"/SavedDict.data"];
[addToFavouritesDictionary removeObjectForKey:ID1];
[favouritesButton setTitle:@"+ Favourites" forState:(UIControlState)UIControlStateNormal];
[addToFavouritesDictionary writeToFile:filePath atomically: YES];
NSLog(@"New Dictionary: %@", addToFavouritesDictionary);
} else {
NSString *ID1 = [[NSUserDefaults standardUserDefaults]objectForKey:@"ID1"];
[addToFavouritesDictionary setObject:Name forKey:ID1];
[favouritesButton setTitle:@"- Favourites" forState:(UIControlState)UIControlStateNormal];
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *filePath = [documentsDirectory stringByAppendingPathComponent:@"/SavedDict.data"];
[addToFavouritesDictionary writeToFile:filePath atomically: YES];
NSLog(@"Mutable Dictionary: %@", addToFavouritesDictionary);
//[addToFavouritesDictionary release];
}
} else {
//NSString *area = [[NSUserDefaults standardUserDefaults]objectForKey:@"area"];
NSString *ID2 = [[NSUserDefaults standardUserDefaults]objectForKey:@"ID2"];
if([[addToFavouritesDictionary allKeys] containsObject:ID2]) {
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *filePath = [documentsDirectory stringByAppendingPathComponent:@"/SavedDict.data"];
[addToFavouritesDictionary removeObjectForKey:ID2];
[favouritesButton setTitle:@"+ Favourites" forState:(UIControlState)UIControlStateNormal];
[addToFavouritesDictionary writeToFile:filePath atomically: YES];
NSLog(@"Dictionary: %@", addToFavouritesDictionary);
} else {
NSString *ID2 = [[NSUserDefaults standardUserDefaults]objectForKey:@"ID2"];
[addToFavouritesDictionary setObject:Name forKey:ID2];
[favouritesButton setTitle:@"- Favourites" forState:(UIControlState)UIControlStateNormal];
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *filePath = [documentsDirectory stringByAppendingPathComponent:@"/SavedDict.data"];
[addToFavouritesDictionary writeToFile:filePath atomically: YES];
NSLog(@"Mutable Dictionary: %@", addToFavouritesDictionary);
}
}
}
Спасибо за любую помощь!
Ok эта линия кажется причиной проблемы: [addToFavouritesDictionary SetObject : Name forKey: ID1]; –
Кажется, что сейчас работает, я просто сохранил объект Name при инициализации. Единственная проблема теперь в том, что кнопки добавления в избранное и удаления в избранные все еще различаются на обоих элементах detailViewControllers, так или иначе, чтобы сохранить их одинаковыми? –