iPhone: проблема с чтением значения значка от uitabbaritem

Я пытаюсь программно выяснить, есть ли у определенного элемента панели вкладок в моем приложении значок.

Пока я отлаживаю, визуально я ясно вижу, что это так. Но когда я запускаю этот код в рассматриваемом viewController:

UITabBarItem* thisVCsTabBarItem = self.tabBarItem;
NSString* badgeValue = thisVCsTabBarItem.badgeValue;

...значокЗначение равно нулю. И когда я проверяю thisVCsTabBarItem в отладчике, его член _badgeValue равен нулю.

Что тут происходит? Должен ли я делать что-то по-другому, пытаясь прочитать это значение из элемента панели вкладок?

Спасибо.


person Greg Maletic    schedule 26.02.2010    source источник
comment
Это должно работать. Вы уверены, что self.tabBarItem возвращает объект, о котором вы думаете?   -  person Don    schedule 27.02.2010
comment
Это хороший вопрос. У него правильное название, хотя изображение не установлено... и, очевидно, оно установлено, если вы посмотрите на панель вкладок на экране. Так что, возможно, это создание нового элемента панели вкладок, хотя он уже существует? (Я знаю, что один уже существует, потому что я устанавливаю его ранее в коде... поэтому у меня есть значок!)   -  person Greg Maletic    schedule 27.02.2010


Ответы (2)


Глядя на код, где я использую свойство UITabBarItem badgeValue, я вижу, что self.tabBarItem.badgeValue возвращает nil, а self.navigationController.tabBarItem.badgeValue возвращает правильное значение. Может ли это быть?

Дело в том, что автодополнение фактически выдает мне tabBarItem после self. Из-за этого легко ошибиться.

person Timothée Boucher    schedule 27.02.2010

Я делаю что-то подобное для вкладки «Загрузки»:

for (UITabBarItem* item in self.tabBarController.tabBar.items) {
    if (item.tag == 3) {
        if (downloadCount > 0) {
            item.badgeValue = [NSString stringWithFormat: @"%d", downloadCount];
        } else {
            item.badgeValue = nil;
        }
    }
}

Я не думаю, что вы должны напрямую обращаться к tabBarItem. Лучше найти свой предмет в массиве предметов tabBarController.

person Stefan Arentz    schedule 27.02.2010
comment
Вот что говорится в документации: значением по умолчанию является элемент панели вкладок, который отображает заголовок контроллера представления. При первом доступе к этому свойству создается UITabBarItem. Поэтому вам не следует обращаться к этому свойству, если вы не используете контроллер панели вкладок. Но поскольку я использую контроллер панели вкладок, подразумевается, что для меня не проблема получить к нему доступ. Знаете ли вы что-то еще в документах, указывающее на то, что прямой доступ к -[UIViewController tabBarItem] является проблемой? Спасибо. - person Greg Maletic; 01.03.2010