Идентификатор NSTabViewItem - это NSNumber в одном контексте, NSString в другом

У меня есть четыре tabViewItems, с идентификаторами 1, 2, 3 и 4, назначенными в IB, а затем настроены как константы, то есть:

#define kTabViewSubject     1

При тестировании, какой tabViewItem выбран, он работает, чтобы обработать идентификаторы как NSNumbers, как это:

if ([self.drawerTabView selectedTabViewItem] identifier] intValue]]] == kTabViewSubject])
// do something

Но при выборе tabViewItem, если я обращаюсь с тем же идентификатором, что и NSNumber, вот так…

[self.drawerTabView selectTabViewItemWithIdentifier:[NSNumber numberWithInt:kTabViewSubject]];

… Идентификатор оценивается как огромное адресоподобное число, и я получаю исключение "за пределами".

Что работает, так это обрабатывать идентификатор как NSString, например так:

#define kTabViewSubjectX        @"1"
// --
[self.drawerTabView selectTabViewItemWithIdentifier:kTabViewSubjectX];

Я понимаю, что свойство идентификатора NSTabViewItem настроено как универсальный "идентификатор". Но почему оно по-разному классифицируется?

1 ответ

Решение

intValue - это метод NSString, а также NSNumber. Идентификаторы всегда были строками.

Другие вопросы по тегам