UITableView titleForHeaderInSection не возвращает правильную строкуWithFormat - PullRequest
2 голосов
/ 24 февраля 2012

Я сталкиваюсь со странной проблемой при попытке вернуть составную строку в разделе titleForHeaderIn в tableView.

Если я NSLog строку, это кажется хорошим, но когда я возвращаю ее, она падает!*

Вот мой код:

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section{

NSString *title = NSLocalizedString(@"favorites",@"");
NSLog(@"%@", title); // this prints the correct title ("Items" for example...)

int number = (*_tabsections_especes)[0][0];
NSLog(@"%d", number); // this prints the correct number ( "5", for example...)

NSLog(@"%@", [NSString stringWithFormat:@"%@ : %d", title, number ] );
    // this prints the correct concatenated string ("Items : 5", for example);

return [NSString stringWithFormat:@"%@ : %d)", title, number ];
    // --> this either crashes the app, or returns anything in the title, 
    // for example the title of a resource image or another pointer...
    } 

Если я заменю "(* _tabsections_especes) [0] [0]", например, на "5", проблема не устраняется.Итак, похоже, что проблема заключается в использовании NSLocalizedString в методе stringWithFormat и его возврате.

Что я делаю не так?

Ответы [ 3 ]

2 голосов
/ 24 февраля 2012

Используйте это раньше

NSString *result = [NSString stringWithFormat:@"%@ : %d)", title, number ];
return result;

или используйте это

NSString *result = [[NSString alloc]initStringWithFormat:@"%@ : %d)", title, number ]]autorelease];
return result;
0 голосов
/ 25 февраля 2012

Я нашел, где была проблема.На самом деле это было не в tableView:titleForHeaderInSection, а скорее в tableView:viewForHeaderInSection.

На самом деле это потому, что я использую подкласс UIView для viewForHeaderInSection.В этом подклассе у меня есть ивар с именем "title".

В методе init этого подкласса я установил этот ивар следующим образом:

title = myTitle;  // (myTitle is an argument of the custom init method)

И чуть позже я используюэтот заголовок в методе drawRect выглядит следующим образом:

[title drawAtPoint:CGPointMake(8, 9) withFont:[UIFont systemFontOfSize:19]];

Это прекрасно работает, если я передаю статическую строку, например @ "example string", из titleForHeaderInSection и через viewForHEaderInSection.

Но совсем неесли я передаю объект автоматического освобождения, такой как stringWithFormat.

Итак, решение состоит в том, чтобы просто сохранить мой ivar в подклассе следующим образом:

title = [myTitle retain];

и освободить его в методе dealloc моегоподкласс:

[title dealloc];

Таким образом, он работает и не падает.Я надеюсь, что это помогает и что объяснения ясны.

0 голосов
/ 24 февраля 2012

Я проверил ваш метод, и он работает. Ищите свою ошибку в другом месте.

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