Не могу понять, какую простую вещь я делаю неправильно с этим объектом CoreData - PullRequest
0 голосов
/ 21 января 2011

У меня есть объект CoreData под названием «Пользователь».У этого объекта есть свойство, объявленное с @property (nonatomic, retain) NSNumber * isloggedin; в User.h, а в User.m у меня есть @dynamic isloggedin;
В моем AppDelegate у меня есть этот метод:

- (NSManagedObject *) getLoggedInUserFromCurrentServer {
NSManagedObject *theUser = nil;

    for (User *user in [[self myServer] users]) {
        if (user.isloggedin == [NSNumber numberWithBool:YES]) {
            // we found it
            theUser = user;
            break;
        }
    }

    return theUser;
}  

Я посмотрел на таблицув моей базе данных и есть только один пользователь и только один сервер.У этого пользователя ZISLOGGEDIN установлено значение 1.
Когда этот код проходит, оператор IF сообщает false.
[NSNumber numberWithBool:YES] возвращает 1, если I po it.
Если I po user.isloggedinили po [user isloggedin] Я получаю no member named isloggedin и Target does not respond to this message selector.
Я уже работал с этим кодом, но изменил его и не могу понять, что я делал до того, как это сработало ... или ради этого, почему это победилоне работаетЯ уверен, что здесь упускаю какую-то безумно очевидную вещь ... но я не могу ее найти.

1 Ответ

2 голосов
/ 21 января 2011

Simple: NSNumber - это тип указателя, поэтому, используя == для сравнения, вы фактически сравниваете указатели с различными NSNumber объектами.Таким образом, даже если оба содержат одинаковые значения BOOL, ваше сравнение не оценивается как YES.

. Для сравнения их примитивных BOOL типов используйте boolValue:

for (User *user in [[self myServer] users]) {
    if ([user.isloggedin boolValue] == YES) {
        // we found it
        theUser = user;
        break;
    }
}
...