在iPhone應用程序中,如何在valueforKey爲ENUM時在控制檯中顯示用戶默認值的值?NSUserDefaults:當valueforKey是ENUM時如何顯示用戶默認值
目前與下面的代碼,如果我嘗試在控制檯中顯示,然後它崩潰與控制檯中沒有崩潰日誌。
NSLog(@"%@",[[NSUserDefaults standardUserDefaults] valueForKey:Enum]);
在iPhone應用程序中,如何在valueforKey爲ENUM時在控制檯中顯示用戶默認值的值?NSUserDefaults:當valueforKey是ENUM時如何顯示用戶默認值
目前與下面的代碼,如果我嘗試在控制檯中顯示,然後它崩潰與控制檯中沒有崩潰日誌。
NSLog(@"%@",[[NSUserDefaults standardUserDefaults] valueForKey:Enum]);
要提取:
int someValue = [[NSUserDefaults standardDefaults] integerForKey:@"your key here"];
保存:
[[NSUserDefaults standardDefaults] setInteger:10 forKey:@"your key here"];
編輯:得了吧,你崩潰,因爲的NSLog您使用了錯誤的格式:
NSLog(@"%i",[[NSUserDefaults standardUserDefaults] valueForKey:Enum]);
嘗試%I(打印整數),而不是%@(用於打印有效的Objective-C對象)
NSUserDefaults
對象實際上只是NSDictionary
對象。 NSDictionary
僅以對象爲關鍵。枚舉只是一個整數,所以你不能直接使用它作爲一個鍵。做到這一點的方法之一,雖然是使用NSNumber
,它可以代表一個整數像下面的對象:
[[NSUserDefaults standardDefults] valueForKey:[NSNumber numberWithInt:yourEnum];
要設置的值,你會怎麼做:
[[NSUserDefaults standardDefaults] setValue:yourValue forKey:[NSNumber numberWithInt:yourEnum]];
@CharlieMezak:這不是我想要的。我編輯了我的問題。請檢查一下。 – 2011-05-18 13:48:17
編輯我的回答 – CharlieMezak 2011-05-18 13:52:31
@CharlieMezak:感謝您的意見。在我使用的代碼中,代碼使用Enum常量作爲NSUserDefaults的鍵值。這是我碰到的地方。可以做什麼? – 2011-05-18 14:07:38
由於enum
實際上只是顯示int
的一種奇特方式,所以您只需創建一個enum
變量並將其設置爲您從NSUserDefaults
獲得的值。
PirateEnumType pirateType = [[NSUserDefaults standardUserDefaults] integerForKey:@"PirateType"];
編輯:
對不起
你可能喜歡的東西而告終。我想我沒有完全理解你的問題。由於enum
確實是int
,因此您需要使用「%i」來顯示它而不是「%@」。
爲了正確地顯示它作爲人類可讀的字符串,你就需要有某種enumToString
功能,也許是這樣的:
-(NSString*)enumToString:(PirateEnumType)enumValue {
NSString* returnValue = @"";
switch (enumValue) {
case Captain:
returnValue = @"Captain";
break;
case Swashbuckler:
returnValue = @"Swashbuckler";
break;
case PegLeg:
returnValue = @"PegLeg";
break;
}
return returnValue;
}
這不是我想要的。我編輯了我的問題。請檢查一下 – 2011-05-18 13:47:26
有兩個問題在這裏。首先,枚舉不能成爲valueForKey中的一個鍵。 valueForKey只能接受字符串,而不能枚舉字符串值。因此,你需要實現一個方法來從一個枚舉中獲取一個字符串值。在我的例子中,該方法是stringFromEnum。這裏是one example of how to get a string from an enum。
有時我看到NSLog在我要求它直接包含發送給對象的消息的返回值時會窒息。我總是發現,將該消息的結果首先分配給一個實例變量,然後將該實例變量的值傳遞給NSLog,而不是解決問題,但承認我沒有弄清楚什麼時候它的相關因素決定了它原來的方式是否工作。對任何評論感興趣。
NSString *myKey = [self stringFromEnum:Enum];
NSString *myStringToLog = [[NSUserDefaults standardUserDefaults] valueForKey:myKey];
NSLog(@"%@", myStringToLog);
你的問題的另一種解讀可以是你的實例變量枚舉實際上是一個字符串,這對於將要NSUserDefaults的返回枚舉密鑰。但是,情況並非如此,因爲NSUserDefaults不會存儲枚舉。有關支持的對象類型,請參閱the documentation。如果這就是你想要做的,你的問題可能部分在其他代碼中,你試圖首先存儲枚舉?
這不是我想要的。我編輯了我的問題。請檢查出來 – 2011-05-18 13:47:46