NSUserDefaults:当valueforKey是ENUM时,如何显示用户默认值

时间:2011-05-18 12:59:58

标签: iphone objective-c cocoa-touch ios4 nsuserdefaults

在iPhone应用程序中,当valueforKey为ENUM时,如何在控制台中显示用户默认值?

目前使用以下代码,如果我尝试在控制台中显示,那么它会在控制台中没有崩溃日志而崩溃。

NSLog(@"%@",[[NSUserDefaults standardUserDefaults] valueForKey:Enum]);

4 个答案:

答案 0 :(得分:5)

获取:

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对象)

答案 1 :(得分:4)

由于enum实际上只是展示int的一种奇特方式,您只需要创建一个enum变量并将其设置为NSUserDefaults的值。 1}}。

你最终会得到类似的东西:

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;
}

答案 2 :(得分:0)

NSUserDefaults个对象实际上只是NSDictionary个对象。 NSDictionary仅将对象作为键。枚举只是一个整数,因此您不能直接将其用作键。一种方法是使用NSNumber,它可以将整数表示为对象,如下所示:

[[NSUserDefaults standardDefults] valueForKey:[NSNumber numberWithInt:yourEnum];

设置您要执行的值:

[[NSUserDefaults standardDefaults] setValue:yourValue forKey:[NSNumber numberWithInt:yourEnum]];

答案 3 :(得分:0)

这里有两个问题。首先,枚举不能成为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);

您的问题的另一个解释可能是您的实例变量Enum实际上是一个字符串,它是将从NSUserDefaults返回的枚举的键。但是,情况并非如此,因为NSUserDefaults不会存储枚举。有关受支持的对象类型,请参阅the documentation。如果您正在尝试这样做,那么您的问题可能部分在其他代码中,您尝试将枚举存储在首位?