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

Опитвам се да разбера програмно дали конкретен елемент от лентата с раздели в приложението ми има значка.

Докато отстранявам грешки, визуално мога ясно да видя, че е така. Но когато стартирам този код във въпросния viewController:

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

...badgeValue е нула. И когато проверявам този VCsTabBarItem в програмата за отстраняване на грешки, неговият член _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