0

好的,因为我是 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";

我不知道这是否是“正确”的做法,但它确实有效。唯一的问题是,当我杀死该应用程序时,它不记得这些值并且我得到“未找到!”。有什么我必须设置的,所以它真的可以保存这些变量吗?

哦,我正在构建一个可可应用程序。

4

2 回答 2

2

registerDefaults:方法用于分配在您请求未定义键时返回的默认值。要实际存储一个值,您需要使用其中一种set*:forKey:方法。具体来说,您应该使用,setObject:forKey:因为您正在保存作为对象的字符串。

- (void)SetRegeditValue:(NSString *)name :(NSString *)value {
    [[NSUserDefaults standardUserDefaults] setObject:value forKey:name];
}

我使用了与您的代码相同的参数顺序,但请注意它与您显示的示例不匹配,该示例首先传递了值。

于 2012-11-19T18:41:22.913 回答
0

NSUserDefaults 方法的文档synchronize说,“将对持久域的任何修改写入磁盘”。...并且... “由于此方法会定期自动调用,因此仅当您无法等待自动同步时(例如,如果您的应用程序即将退出)才使用此方法”

由于您说当您看到问题时您正在杀死应用程序,所以您可能属于需要显式同步的类别。

于 2012-11-19T18:39:00.673 回答