iPhone:在应用程序被杀死时保留NSUserDefaults值 [英] iPhone: preserve NSUserDefaults values when application is killed

查看:137
本文介绍了iPhone:在应用程序被杀死时保留NSUserDefaults值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试使用NSUserDefaults实现添加到收藏夹功能。到目前为止,我已经编写了以下代码。

I am trying to implement "Add to Favorites" functionality using NSUserDefaults. So far I have written following code.

- (void)favouriteButtonClicked:(id)sender
{
favselected = !favselected; // favselected is BOOL property
MyAppDelegate *appDelegate = (MyAppDelegate *)[[UIApplication sharedApplication] delegate];
NSString* viewname = @"custom";

if(favselected) {
    [favButton setBackgroundImage:[UIImage imageNamed:@"selected.png"] forState:UIControlStateNormal];
    [appDelegate addTOFavourites:self.ViewID viewType:self.ViewType];
} else {
    [favButton setBackgroundImage:[UIImage imageNamed:@"unselected.png"] forState:UIControlStateNormal];
    [appDelegate removeFromFavourites:self.ViewID viewType:self.ViewType];
}
}

只要我的应用程序正在运行,它就可以正常工作但是当我杀死我的应用程序时,我丢失了所有存储的值,因此当下次加载视图时,在viewload isAddedToFavorites方法中返回false。反正有没有保留我的价值观?我错过了什么吗?

It is working fine as long as my application is running but when I killed my application, I am losing all my stored values so when next time view loaded, in viewload isAddedToFavorites method returns false. Is there anyway to preserve my values? Am I missing something?

    if([appDelegate isAddedToFavorites:self.ViewID]) {
        [favButton setBackgroundImage:[UIImage imageNamed:@"selected.png"] forState:UIControlStateNormal];
        favselected = YES;
    } else {
        [favButton setBackgroundImage:[UIImage imageNamed:@"unselected.png"] forState:UIControlStateNormal];
        favselected = NO;
    }

编辑:

我尝试使用NSMutableDictionary,因为我必须添加多个键值,但是即使将对象添加到字典后,以下方法也始终显示Count = 0。任何帮助将非常感激。谢谢。

I tried using NSMutableDictionary as I have to add multiple key-values but following method always display Count=0 even after adding object to dictionary. Any help would be really appreciated. Thank you.

-(BOOL)isAddedToFavorites:(NSString*)viewID {
NSUserDefaults *standardUserDefaults = [NSUserDefaults standardUserDefaults];
NSMutableDictionary *favourites = [[standardUserDefaults objectForKey:kFavouriteItemsKey] mutableCopy];

if(favourites && [[favourites objectForKey:kFavouriteItemsKey] objectForKey:viewID])
    return YES;

return NO;
}

-(void)addToFavourites:(NSString*)viewID viewType:(NSString*)viewType {

NSUserDefaults *standardUserDefaults = [NSUserDefaults standardUserDefaults];
NSMutableDictionary *dict = [[standardUserDefaults objectForKey:kFavouriteItemsKey] mutableCopy];

if(standardUserDefaults) {
    if(![dict objectForKey:viewID])
        [dict setObject:viewType forKey:viewID]; // It is coming here but still count zero!

    NSLog(@"count = %d", [dict count]);

    [standardUserDefaults setObject:dict  forKey:kFavouriteItemsKey]; // Always dict remains null with 0 objects in it
    [standardUserDefaults synchronize];
    [dict release];
}
}

-(void)removeFromFavourites:(NSString*)viewID viewType:(NSString*)viewType {

NSUserDefaults *standardUserDefaults = [NSUserDefaults standardUserDefaults];
NSMutableDictionary *dict = [[standardUserDefaults objectForKey:kFavouriteItemsKey] mutableCopy];

if(standardUserDefaults) {
    if ([dict objectForKey:viewID])
        [dict removeObjectForKey:viewID];

    [standardUserDefaults setObject:dict  forKey:kFavouriteItemsKey];
    [standardUserDefaults synchronize];
    [dict release];
}
}

谢谢。

推荐答案

NSUserDefaults实际上用于永久存储值,实际上如果您为程序创建任何设置,它们将被保存为NSUserDefaults。

NSUserDefaults is actually used to store values permanently, in fact if you create any Settings for your program they will be saved as NSUserDefaults.

我认为问题在于你没有使用你正在检索的密钥保存它。尝试像这样保存:

I think the problem is that you are not saving it with the same key you are retrieving. Try saving like this:

  //To save
  NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
  [defaults setObject:appDefaults forKey:kFavouriteItemsKey];
  [[NSUserDefaults standardUserDefaults] synchronize];

  //To retrieve
 NSUserDefaults *standardUserDefaults = [NSUserDefaults standardUserDefaults];
 NSMutableDictionary *favourites = [[standardUserDefaults objectForKey:kFavouriteItemsKey]   mutableCopy];

对于字典试试:

 NSDictionary *myDictionary= [[NSUserDefaults standardUserDefaults] objectForKey:kFavouriteItemsKey];

        // Create a mutable dictionary to replace the old immutable dictionary
    NSMutableDictionary *myMutableDictionary= [NSMutableDictionary dictionaryWithCapacity:[myDictionary count]+1];

        // transfer the old dictionary into the new dictionary
    [myMutableDictionaryaddEntriesFromDictionary:myDictionary];

        // Now add the data
    [myMutableDictionary setObject:myObject forKey:myKey];

这篇关于iPhone:在应用程序被杀死时保留NSUserDefaults值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆