Как проверить равенство в Objective-C? - PullRequest
3 голосов
/ 05 ноября 2011

При сравнении видов сверху первый {} не выполняется.== Тест на равенство не пройден.

В init, i

    [self setCurrentPuzzleView:p1];

А позже, i

if ([self currentPuzzleView] == p1) {
    NSLog(@"Removing P1 from SuperView");
    [p1 removeFromSuperview];
} else {
    NSLog(@"Removing P2 from SuperView");
    [p2 removeFromSuperview];
}

Это теперь как следует сравнивать представления?Я думал, что == подходит для типов указателей

if ([self currentPuzzleView] == p1) {

Отношения между представлениями устанавливаются через InterfaceBuilder, где каждое представление (p1, p2 и т. Д.) Объявлено как IBOutlet Puzzle1 *p1.

Ответы [ 3 ]

5 голосов
/ 05 ноября 2011

== в Objective-C проверяет идентичность. То есть два указателя указывают на один и тот же объект.

Для проверки на равенство используйте: [objectA isEqual:objectB]. По умолчанию он делает то же, что и ==, но его можно переопределить, чтобы получить пользовательское равенство.

Редактировать

Сказав это и перечитав ваш вопрос. Два указателя выглядят так, как будто они указывают на один и тот же объект. Попробуйте распечатать оба сравниваемых объекта, прежде чем сравнивать их. Также попробуйте напечатать их адреса памяти: NSLog(@"Address: %d", &p1);, вероятно, подойдет вам.

1 голос
/ 05 ноября 2011

Я бы установил тег для этого вида и сравнил бы теги.

if(view.tag == 66)
{
 // do something
}
else
{
// else do this
}
0 голосов
/ 29 декабря 2011

Твой код мне подходит.

Возможно, self.currentPuzzleview где-то изменяется?

Установите точку останова в коде и проверьте значения или напечатайте значения в вызове NSLog ().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...