好的,因为我是obj-c的新手,并且有windows开发的背景,所以我正在搜索Regedit的对应程序。
我知道我应该使用NSUserDefaults,对吧?
因此,我创建了两个函数,一个用于设置,另一个用于获取值。它们看起来像这样:(是的.忽略我愚蠢的函数名) :)
//SET:
-(void)SetRegeditValue:(NSString*)Name:(NSString*)Value
{
NSUserDefaults *ud = [NSUserDefaults standardUserDefaults];
NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:Value,Name, nil];
[ud registerDefaults:dict];
}
//GET:
-(NSString*)GetRegeditValue:(NSString *)Name
{
NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
NSString *get = [prefs stringForKey:Name];
if(get)
return get;
else
return @"Not found!";
}我是这样使用它们的:
//TO SET:
SetRegitValue:@"my_value":@"my_value_name";
//TO GET:
GetRegeditName:@"my_value_name";我不知道这是不是“正确”的方法,但它是有效的。唯一的问题是,当我终止应用程序时,它不会记住这些值,我会得到“找不到!”。有没有什么我必须设置的,这样它才能真正保存这些变量?
哦,我正在构建一个可可应用。
发布于 2012-11-20 02:41:23
registerDefaults:方法用于分配默认值,当您请求一个未定义的键时,将返回这些默认值。要实际存储值,需要使用set*:forKey:方法之一。具体地说,您应该使用setObject:forKey:,因为您要保存字符串,它是对象。
- (void)SetRegeditValue:(NSString *)name :(NSString *)value {
[[NSUserDefaults standardUserDefaults] setObject:value forKey:name];
}我使用了与您的代码相同的参数顺序,但请注意,它与您展示的示例不匹配,该示例首先传递了值。
发布于 2012-11-20 02:39:01
NSUserDefaults的synchronize方法的文档说,“将对持久域的任何修改都写入磁盘”。...and...因为此方法是以定期间隔自动调用的,所以仅当您无法等待自动同步时才使用此方法(例如,如果您的应用程序即将退出)。
既然你说当你看到问题的时候你正在杀死应用程序,也许你属于需要显式同步的那一类。
https://stackoverflow.com/questions/13459898
复制相似问题