Добавить в избранное Функция iPhone - PullRequest
0 голосов
/ 16 мая 2011

Я пытаюсь включить функцию «добавить в избранное», работающую над моим приложением. Я просто не могу заставить его работать правильно. В основном каждый раз, когда мой телефон перезагружается, все избранное удаляется из массива и словаря. Есть ли способ сохранить эти данные, чтобы они сохранялись и восстанавливались при каждом запуске приложения? Большое спасибо.

Вот часть кода: в appDidFinishLaunching:

//============== Add To Favourites ==============

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *filePath = [documentsDirectory stringByAppendingPathComponent:@"Saved.data"];


NSArray *pathsArray = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectoryArray = [pathsArray objectAtIndex:0];
NSString *filePathArray = [documentsDirectoryArray stringByAppendingPathComponent:@"savedArray.data"];

delegateFavouritesDictionary = [NSMutableDictionary dictionary];
[delegateFavouritesDictionary writeToFile:filePath atomically:YES];

    delegateFavouritesArray = [[NSMutableArray alloc]init];

В представлении detailViewControllerDidLoad:

self.addToFavouritesArray = [[NSMutableArray alloc] init];
self.addToFavouritesDictionary = [NSMutableDictionary dictionary];
TabBar_NavigationBasedAppDelegate *mainDelegate = (TabBar_NavigationBasedAppDelegate *)[[UIApplication sharedApplication]delegate];
//addToFavouritesArray = [[NSMutableArray alloc] init];
NSMutableArray *tempArray1 = mainDelegate.delegateFavouritesArray;
//NSMutableDictionary *tempDictionary1 = mainDelegate.delegateFavouritesDictionary;
addToFavouritesArray = tempArray1;

//self.addToFavouritesDictionary = tempDictionary1;


NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *filePath = [documentsDirectory stringByAppendingPathComponent:@"Saved.data"];
addToFavouritesDictionary = [[NSMutableDictionary alloc] initWithContentsOfFile:filePath];

В контроллере detailView, в функции addToFavourites:

NSString *ID = [[NSUserDefaults standardUserDefaults]objectForKey:@"ID"];

    if([[addToFavouritesDictionary allKeys] containsObject:ID]) {

        NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
        NSString *documentsDirectory = [paths objectAtIndex:0];
        NSString *filePath = [documentsDirectory stringByAppendingPathComponent:@"Saved.data"];



        [addToFavouritesDictionary removeObjectForKey:ID];
        [addToFavouritesArray removeObject:Name];
        [favouritesButton setTitle:@"+ Favourites" forState:(UIControlState)UIControlStateNormal];
        [addToFavouritesDictionary writeToFile:filePath atomically: YES];
        NSLog(@"New Dictionary: %@", addToFavouritesDictionary);

    } else {

        [addToFavouritesArray addObject:Name];
        NSString *ID = [[NSUserDefaults standardUserDefaults]objectForKey:@"ID"];
        [addToFavouritesDictionary setObject:Name forKey:ID];
        [favouritesButton setTitle:@"- Favourites" forState:(UIControlState)UIControlStateNormal];

        NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
        NSString *documentsDirectory = [paths objectAtIndex:0];
        NSString *filePath = [documentsDirectory stringByAppendingPathComponent:@"Saved.data"];

        [addToFavouritesDictionary writeToFile:filePath atomically: YES];
        NSLog(@"Mutable Dictionary: %@", addToFavouritesDictionary);
        //[addToFavouritesDictionary release];

    }

В контроллере FavouritesView, в viewDidLoad:

TabBar_NavigationBasedAppDelegate *mainDelegate = (TabBar_NavigationBasedAppDelegate *)[[UIApplication sharedApplication]delegate];


favouritesArray = [[NSMutableArray alloc] init];

NSMutableArray *tempArray1 = mainDelegate.delegateFavouritesArray;
favouritesArray = tempArray1;

    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *filePath = [documentsDirectory stringByAppendingPathComponent:@"Saved.data"];


favouritesDictionary = [[NSMutableDictionary alloc] initWithContentsOfFile:filePath];

Большое спасибо за любую помощь

1 Ответ

0 голосов
/ 16 мая 2011

В вашем методе applicationDidFinishLaunching: (таким образом, каждый раз, когда ваше приложение запускается) вы сначала создаете пустой NSMutableDictionary, а затем записываете его в Saved.data, потенциально перезаписывая все, что могло быть там.

...