У меня возникла странная проблема с логической логикой. Должно быть, я делаю что-то глупое, но я не могу понять. В приведенном ниже коде firstMeasure.isInvisibleArea имеет значение true и measureBuffer1 равно нулю. Несмотря на то, что test1 оценивает значение NO по какой-либо причине, он все равно переходит в оператор if. Он работает нормально, если я использую прокомментированную строку. Любая идея, почему это происходит?Ошибка логической логики
BOOL firstVisible = firstMeasure.isInVisibleArea;
BOOL notFirstVisible = !(firstMeasure.isInVisibleArea);
BOOL measureBufferNil = measureBuffer1 == nil;
BOOL test1 = measureBuffer1 == nil && !firstMeasure.isInVisibleArea;
BOOL test2 = measureBufferNil && !firstVisible;
if (measureBuffer1 == nil && !firstMeasure.isInVisibleArea)
//if (measureBufferNil && !firstVisible)
{
//do some action
}
Update 1:
я изолировал проблему firstMeasure.isInVisibleArea как я полностью взял на себя немного measureBuffer!. Внутри isInVisible области небольшой расчет (он ничего не изменяет, хотя), но расчет использует self.view.frame. Я тоже возьму это из уравнения и посмотрю, что произойдет. Моя догадка заключается в том, что self.view.frame меняется между двумя вызовами isInVisibleArea.
Update 2: Это действительно проблема. Я добавил ответ более подробно ниже
Я думаю, что я говорю для всех, когда говорю «этот код должен работать точно так же». Если, возможно, вы не забыли знак равенства в одном из ваших сравнений где-нибудь. Вы пробовали один шаг в Xcode? –
Да, у меня есть. Для меня это тоже не имеет смысла. – Ian1971
Я обнаружил, что он должен быть связан с областью firstMeasure.isInVisible, потому что я пробовал его без бита measureBuffer1.Я обновил вопрос – Ian1971