将NSNumber转换为NSString并不是一个字符串

Obl*_*pps 1 objective-c nsnumber

我有一个问题,将NSNumber值转换为NSString

MyPowerOnOrNot是一个NSNumber女巫只能返回1或0并且myStringNSString...

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语句?

如果不实际应该跳到语句中......我真的不明白为什么这不起作用..任何帮助都会非常好!

Jer*_*myP 7

几个问题

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意外被错误设置错误.