Пара проблем
myString = [NSString stringWithFormat:@"%d", [myPowerOnOrNot stringValue]];
-stringValue , отправленная на NSNumber
, дает вам ссылку на строку.Спецификатор формата %d
предназначен для типа C int
.В этом случае произойдет то, что myString будет содержать адрес строки NSString, возвращенной [myPowerOnOrNot stringValue]
.Или на 64-битном он вернул бы половину этого адреса.Вы могли бы использовать [myPowerOnOrNot stringValue]
напрямую и избежать относительно дорогих -stringWithFormat:
if(myString == @"1")
myString
и @"1"
- это не обязательно один и тот же объект.Ваше условие только проверяет, что ссылки идентичны.В общем случае с Objective-C вы должны использовать -isEqual:
для равенства объектов, но, поскольку мы знаем, что это строки, вы можете использовать -isEqualToString:
if ([[myPowerOnOrNot stringValue] isEqualToString: @"1"])
Или даже лучше сделать числовое сравнение вашихNSNumber преобразуется в целое число.
if ([myPowerOnOrNot intValue] == 1)
Наконец, если myPowerOnOrNot
не должен иметь никакого значения, кроме 0 или 1, рассмотрите возможность использования перехвата else
, который утверждает или выдает исключение на всякий случай myPowerOnOrNot
случайно ошибся.