Я хочу перевірити це твердження:
if([optionsDictionary objectForKey:@"showTimes"]
&& [[optionsDictionary objectForKey:@"showTimes"]isEqualToString:@"1"])
Збої програми Питання в тому - чи перевіряє об’єктив-C всі умови? Тому що в C #, якщо 1 умова не вдається, то друга взагалі не перевіряється
Відповіді:
1 для відповіді № 1Використовуйте [[optionsDictionary objectForKey:@"showTimes"] boolValue]
щоб визначити, чи це "0" чи "1".
Змініть свій стан як
if([optionsDictionary objectForKey:@"showTimes"]
&& (1 == [[optionsDictionary objectForKey:@"showTimes"] boolValue]))
0 для відповіді № 2
(1) Якщо заяви та && та || Оператори оцінюються точно так само в Objective-C, як і в C, C ++ або Java.
(2) Якщо ви надішлите будь-яке повідомлення об'єкту, який є нульовим, результат буде 0 / NO / nil. Тому && - безглуздо. Ви могли просто писати
if ([[optionsDictionary objectForKey:@"showTimes"]isEqualToString:@"1"])
До речі, менш заплутано для себе та всіх інших, щоб перевірити, чи є об’єкт нульовим, порівнявши його з нульовим.
(3) Надіслати метод isEqualToString до об'єктаце не NSString вийде з ладу. Збіг підкаже, яке повідомлення ви надіслали якому об’єкту. NSCFBoolean - це NSNumber з булевим значенням, тому він виходить з ладу.
Вам потрібно або знати, що у вас єсловник або перевірити його. Якщо ви самі не вводили значення у словник, ви не знаєте, що там є. Наприклад, якщо ви використовували аналізатор для розбору документа JSON, ваш поточний код знову закінчиться, якщо документ JSON містить нульове значення. Або словник.
Найкраще, тому що це станеться з вами знову і знову, - це написати категорію NSDictionary методом boolValueForKey: яка робить для вас всі перевірки.