Ios 我把演员演得很烂

Ios 我把演员演得很烂,ios,objective-c,casting,Ios,Objective C,Casting,这两行代码是不同的还是相同的编辑:它们做的是相同的事情吗,类型转换为布尔值 BOOL isRegistered = (BOOL)[[NSUserDefaults standardUserDefaults] valueForKey:@"DEVICE_REGISTERED"]; BOOL isRegistered = [[[NSUserDefaults standardUserDefaults] objectForKey:@"Is Registered"] boolValue]; 在iOS8.1

这两行代码是不同的还是相同的编辑:它们做的是相同的事情吗,类型转换为布尔值

BOOL isRegistered = (BOOL)[[NSUserDefaults standardUserDefaults] valueForKey:@"DEVICE_REGISTERED"];

BOOL isRegistered = [[[NSUserDefaults standardUserDefaults] objectForKey:@"Is Registered"] boolValue];
在iOS8.1中,第一个肯定是失败的。对bool的演员阵容不起作用,演员阵容总是以false返回。正在存储第二个示例的值,如下所示:

[[NSUserDefaults standardUserDefaults] setObject:[NSString stringWithFormat:@"%i", registerSuccess] 
                                          forKey:@"Is Registered"];

registerSuccess是从web服务JSON返回的值

将NSString对象强制转换为bool,这将永远不会做任何有用的事情。强制转换不会更改或转换某些内容,它只是使编译器静音

假设isRegistered是一个NSNumber对象,因为它将从JSON响应中反序列化: 使用NSN号码

[[NSUserDefaults standardUserDefaults] setObject:registerSuccess forKey:@"isRegistered"];

或者直接用一个Bool

[[NSUserDefaults standardUserDefaults] setBool:[registerSuccess boolValue]forKey:@"isRegistered"];

BOOL isRegistered = [[NSUserDefaults standardUserDefaults] boolForKey:@"isRegistered];

我建议按如下方式保存该值:

[[NSUserDefaults standardUserDefaults] setObject:[NSNumber numberWithBool:registerSuccess] forKey:@"DEVICE_REGISTERED"];

然后像您在显示的代码第二行中所做的那样,在注册了@DEVICE_键的情况下读回该值。

我使用下面的代码来写入和读取布尔值


// assume that "isDeviceRegisterred" is a boolean data type parameter that comes from the web service
[[NSUserDefaults standardUserDefaults] setBool:isDeviceRegisterred  forKey:@"DEVICE_REGISTERED"];

BOOL isRegistered = [[NSUserDefaults standardUserDefaults] boolForKey:@"DEVICE_REGISTERED"];

首先,考虑使用NSUDER DEBULL BOOLFROKEY:.

回答你的问题:

BOOL isRegistered = (BOOL)[[NSUserDefaults standardUserDefaults] valueForKey:@"DEVICE_REGISTERED"];
在这里,NSUserDefaults返回NSNumber,您正试图将指向NSNumber的指针强制转换为BOOL。如果您的设置根本没有定义,valueForKey将返回nil,它将被视为false。如果为此设置设置了任何值,valueForKey将返回指向NSNumber的指针,当您尝试将其转换为BOOL时,您的值将始终为True

BOOL isRegistered = [[[NSUserDefaults standardUserDefaults] objectForKey:@"isRegistered"] boolValue];

在这里,NSUserDefaults将NSNumber返回给您,您可以对其调用布尔值,它将按照您的预期工作。如果根本没有定义设置,valueForKey将返回nil,在nil上调用boolValue将返回另一个nil,该值被转换为false

你也可以考虑使用NSUDER Debug StbOOL:FoKe:和BooFrKEK:方法,并确保原来保存的值是布尔值,不管怎样,这个设备将只关注主要问题,但是为了通知初学者,我把它改成了动态的。主要的问题是对演员表演的误解。谢谢所有的答案。这就是我想要的,对两者区别的解释。第一个是我没有写的遗留代码,第二个是我的。我将使用boolforky重写,并将NSNumber存储为bool。
BOOL isRegistered = [[[NSUserDefaults standardUserDefaults] objectForKey:@"isRegistered"] boolValue];