Выпуск BOOL в Objective-C - PullRequest
       17

Выпуск BOOL в Objective-C

2 голосов
/ 14 января 2010

Когда я пытаюсь сделать это, чтобы получить BOOL из словаря, я получаю:

BOOL isTrue = [someDict objectForKey: @"isTrue"];

Я получаю:

Initialization makes integer from pointer without a cast

Я устанавливаю словарь следующим образом:

self.someDict = [[NSMutableDictionary alloc]
    initWithObjectsAndKeys:
        self.isTrue, @"isTrue",
        nil];

Есть идеи?

1 Ответ

19 голосов
/ 14 января 2010

Использование:

BOOL isTrue = [[someDict objectForKey:@"isTrue"] boolValue];

Единственный способ сохранить BOOL в NSDictionary - это поместить его в NSNumber объект. BOOL является примитивным, а словарь содержит только объекты.

Аналогично, чтобы сохранить BOOL в словаре, используйте:

[someDict setObject:[NSNumber numberWithBool:isTrue] forKey:@"isTrue"];

РЕДАКТИРОВАТЬ: (в ответ на комментарий)

Есть два способа представить это как @property. Один - объявить ивар как BOOL, а другой - объявить его как NSNumber.

Для первого случая, ivar: BOOL isTrue;, а свойство @property BOOL isTrue; (очевидно, я игнорирую соглашения об именах).

Для NSNumber значение ивара: NSNumber * isTrue; и свойство @property (nonatomic, retain) NSNumber * isTrue;. Если вы пойдете по этому маршруту, вы можете захотеть предоставить второй метод установки (setIsTrueBool или что-то в этом роде), который позволит вам просто передать YES или NO, а затем вы сами выполните бокс. В противном случае любой, кто это сделает, должен сам заниматься боксом.

Лично я бы, скорее всего, выбрал вариант № 1, но это действительно зависит от цели класса.

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