iOS转换为BOOL

Pru*_*goe 0 casting objective-c ios

这两行代码是不同还是相同(编辑:他们做同样的事情,强制转换为布尔值吗?):

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

BOOL isRegistered = [[[NSUserDefaults standardUserDefaults] objectForKey:@"Is Registered"] boolValue];
Run Code Online (Sandbox Code Playgroud)

在iOS8.1中,第一个肯定是失败的.对bool的强制转换不起作用,强制转换总是返回错误状态.正在存储该值(对于第二个示例),如下所示:

[[NSUserDefaults standardUserDefaults] setObject:[NSString stringWithFormat:@"%i", registerSuccess] 
                                          forKey:@"Is Registered"];
Run Code Online (Sandbox Code Playgroud)

registerSuccess是从Web服务(JSON)返回的值.

Vik*_*ica 5

你将一个NSString对象转换为bool,它永远不会做任何有用的事情.演员表不会改变或转换某些内容,它只会使编译器静音.

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

[[NSUserDefaults standardUserDefaults] setObject:registerSuccess forKey:@"isRegistered"];
Run Code Online (Sandbox Code Playgroud)

BOOL isRegistered = [[[NSUserDefaults standardUserDefaults] objectForKey:@"isRegistered"] boolValue];
Run Code Online (Sandbox Code Playgroud)

或直接Bool

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

BOOL isRegistered = [[NSUserDefaults standardUserDefaults] boolForKey:@"isRegistered];
Run Code Online (Sandbox Code Playgroud)