NSUserdefaults保存空字符串但字符串不为空

时间:2013-03-06 05:49:02

标签: ios objective-c nsuserdefaults

-(void)addPower:(NSString *)newPower{
    newPower = [newPower lowercaseString];
    for(int i=0; i<[powers count]; i++){
        NSString *p = [powers objectAtIndex:i];
        NSString* count = p;
        NSRange endRange = [p rangeOfString:@" "];
        NSRange searchRange = NSMakeRange(0, endRange.location);
        p = [p substringWithRange:searchRange];

        endRange = [count rangeOfString:@" "];
        count = [count substringWithRange:NSMakeRange(endRange.location, count.length-p.length)];
        if([newPower isEqualToString:p]){
            NSString *addNewPower = [NSString stringWithFormat:@"%@ %i",newPower,count.integerValue+1];
            [powers replaceObjectAtIndex:i withObject:addNewPower];
            [ud setValue:addNewPower forKey:productName];
            NSLog(@"NEW POWER ADDED: %@ ||| %@\n",addNewPower,productName);
            NSLog(@"NEW POWER UD: %@\n",[ud stringForKey:productName]);
        }
    }
    [ud synchronize];
}

输出是;

新增功率:快照4 |||卡扣

NEW POWER UD :( null)

当我在手机上重新启动应用程序后再次加载Userdefault时,它会用“1”替换应该是“snap 4”

我不明白为什么它不保存我的用户默认值。

编辑: 忘了提,ud设置在初始化器和&amp;我尝试了setObject forKey并仍然得到了相同的结果

5 个答案:

答案 0 :(得分:0)

NSUserDefaults *ud = [NSUserDefaults standardUserDefaults];

[ud setValue:addNewPower forKey:@"productName"];

试试这个......可能对你有帮助......

答案 1 :(得分:0)

如果你有ud = [NSUserdefaults standardUserDefaults];尝试将ud作为类的属性,并使用self.ud在您的类中的任何位置访问它。

你的.h

中的

{
    NSUserdefaults *ud;
}
@property (nonatomic, weak) NSUserdefaults *ud;

然后在你的.m

@synthesize ud;

然后当你初始化

self.ud = [NSUserdefaults standardUserDefaults];

答案 2 :(得分:0)

请尝试使用此。我认为这样可以正常工作。当然你不能得到价值becoz你没有先同步它所以首先同步plz然后打印它。

[ud setValue:addNewPower forKey:productName];
[[ud standardUserDefaults] synchronize];
NSLog(@"NEW POWER ADDED: %@ ||| %@\n",addNewPower,productName);
NSLog(@"NEW POWER UD: %@\n",[ud stringForKey:productName]);

答案 3 :(得分:0)

尝试注册默认值:

在捆绑包中创建新的plist。 (拖放可能 - 如果您已经有包含默认值的plist文件)

然后在应用程序的开头:

 NSString *plistPath = [[NSBundle mainBundle] pathForResource:@"defaults" ofType:@"plist"];
    NSDictionary *dict = [[NSDictionary alloc] initWithContentsOfFile:plistPath];
    [[NSUserDefaults standardUserDefaults] registerDefaults:dict];

然后你有更多的安全保障做事。

答案 4 :(得分:-3)

那是因为syncronize不是即时的。尝试将NSLog放在此行之后:

[ud syncronize];

你会发现它运作良好。