-(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并仍然得到了相同的结果
答案 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];
你会发现它运作良好。