2
-(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];
}

输出是;

新增功能:snap 4 ||| 折断

新力量 UD:(空)

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

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

编辑:忘了提,在初始化程序中设置了 ud 并且我尝试了 setObject forKey 并且仍然得到相同的结果

4

5 回答 5

0
NSUserDefaults *ud = [NSUserDefaults standardUserDefaults];

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

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

于 2013-03-06T06:04:56.673 回答
0

如果你有 ud = [NSUserdefaults standardUserDefaults]; 尝试使 ud 成为类的属性并通过在类中的任何地方使用 self.ud 来访问它。

在你的 .h

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

然后在你的 .m

@synthesize ud;

然后当你初始化

self.ud = [NSUserdefaults standardUserDefaults];
于 2013-03-06T06:10:47.730 回答
0

请尝试使用它。我认为这可以正常工作。是的,你当然无法获得价值,因为你没有先同步它,所以请先同步它然后打印它。

[ud setValue:addNewPower forKey:productName];
[[ud standardUserDefaults] synchronize];
NSLog(@"NEW POWER ADDED: %@ ||| %@\n",addNewPower,productName);
NSLog(@"NEW POWER UD: %@\n",[ud stringForKey:productName]);
于 2013-03-06T06:35:55.473 回答
0

尝试注册您的默认值:

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

然后在应用程序的开头:

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

然后你有一个更安全的做事。

于 2013-03-06T06:37:10.090 回答
-3

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

[ud syncronize];

你会看到它工作正常。

于 2013-03-06T06:11:04.593 回答