Obl*_*pps 1 objective-c nsnumber
我有一个问题,将NSNumber值转换为NSString
MyPowerOnOrNot是一个NSNumber女巫只能返回1或0并且myString是NSString...
myString = [NSString stringWithFormat:@"%d", [myPowerOnOrNot stringValue]];
NSLog(@"%@",myString);
if(myString == @"1") {
[tablearrayPOWERSTATUS addObject:[NSString stringWithFormat:@"%@",@"ON"]];
}
else if(myString == @"0") {
[tablearrayPOWERSTATUS addObject:[NSString stringWithFormat:@"%@",@"OFF"]];
}
Run Code Online (Sandbox Code Playgroud)
这有什么问题?
该NSLog节目0或控制台作为串1,但是我不能检查,如果它是1或0的if语句?
如果不实际应该跳到语句中......我真的不明白为什么这不起作用..任何帮助都会非常好!
几个问题
myString = [NSString stringWithFormat:@"%d", [myPowerOnOrNot stringValue]];
Run Code Online (Sandbox Code Playgroud)
发送NSNumber给a的-stringValue为您提供对字符串的引用.格式说明符%d用于C int类型.在这种情况下会发生的是myString将包含返回的NSString的地址[myPowerOnOrNot stringValue].或者,在64位上,它将返回该地址的一半.你可以[myPowerOnOrNot stringValue]直接使用,避免相对昂贵-stringWithFormat:
if(myString == @"1")
Run Code Online (Sandbox Code Playgroud)
myString并且@"1"不一定是相同的对象.您的条件仅检查引用是否相同.通常使用Objective-C,您应该使用-isEqual:对象的相等性,但是我们知道这些是字符串,您可以使用-isEqualToString:
if ([[myPowerOnOrNot stringValue] isEqualToString: @"1"])
Run Code Online (Sandbox Code Playgroud)
或者更好的是,将NSNumber转换为int进行数值比较.
if ([myPowerOnOrNot intValue] == 1)
Run Code Online (Sandbox Code Playgroud)
最后,如果myPowerOnOrNot不应该有除0或1以外的任何值,请考虑使用一个else断言或抛出异常的catchall ,以防万一myPowerOnOrNot意外被错误设置错误.