2012-11-19 21 views
0

好的,因爲我是obj-c的新手,並且在Windows開發中有背景知識,所以我正在尋找Regedit的對應部分。NSUserDefaults和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"; 

我不知道這是否是「正確「的方式來做到這一點,但它的工作原理。 唯一的是,當我殺了應用程序,它不記得這些值,我得到「找不到!」。有什麼我必須設置,所以它真的保存這些變量?

哦,我正在建造一個可可應用程序。

回答

2

registerDefaults:方法用於分配默認值,當您詢問未定義的鍵時會返回該默認值。要實際存儲值,您需要使用set*:forKey:方法之一。具體而言,您應該使用setObject:forKey:,因爲您保存的是字符串,它們是對象。

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

我用同樣的參數順序,你的代碼做了,但要注意,它不匹配它首先傳遞的值,你表現的例子。

0

NSUserDefaults的synchronize方法的文檔說「將任何對永久域的修改寫入磁盤」。 ...和... 「因爲此方法是定期自動調用的,所以只有當您不能等待自動同步(例如,如果您的應用程序即將退出)」「時才使用此方法。

既然你說當你看到問題時你正在殺死應用程序,或許你是在需要明確同步的類別。