Делегаты не работают должным образом - PullRequest
1 голос
/ 21 апреля 2010

Я новичок в разработке для iPhone. Я конвертирую дату в желаемый формат и устанавливаю ее для делегата и получаю ее значение в другом представлении. Сессия возобновляется, когда я пытаюсь получить значение от делегата. Если я установлю исходную дату, а не отформатированную дату в заданном делегате, я смогу получить значение в другом представлении. Если я также дам какое-либо статическое строковое значение, то я также смогу вернуться к статическому строковому значению. После этого перезапускается только форматированная дата, которая является строкой. Если я печатаю и проверяю значение отформатированной даты, она печатает только правильную отформатированную дату. Пожалуйста, помогите мне. Вот мой код для преобразования даты

NSString *dateval=[[stories objectAtIndex: storyIndex] objectForKey:@"date"];

NSDateFormatter *inputFormatter = [[NSDateFormatter alloc] init];

[inputFormatter setDateFormat:@"EEE, MMM dd, yyyy"];

NSDate *inputDate = [inputFormatter dateFromString:dateval];

NSDateFormatter *outputFormatter = [[NSDateFormatter alloc] init];

[outputFormatter setDateFormat:@"MMMM dd"];

NSString *outputDate = [outputFormatter stringFromDate:inputDate];  

AppDelegate *delegate=(AppDelegate *)[[UIApplication sharedApplication]delegate];

[delegate setCurrentDates:outputDate];

EDIT: Это отображается в консоли

вид изнутри загрузил

[Сессия началась в 2010-04-21 19:12:53 +0530.] GNU gdb 6.3.50-20050815 (версия Apple, gdb-967) (вторник, 14 июля, 02:11:58 UTC 2009) Copyright 2004 Free Software Foundation, Inc. GDB - это бесплатное программное обеспечение, на которое распространяется стандартная общественная лицензия GNU, и вы добро пожаловать изменить его и / или распространять его копии при определенных условиях. Введите «показать копирование», чтобы увидеть условия. На GDB нет абсолютно никаких гарантий. Тип "показать гарантию" для деталей. Эта GDB была настроена как «i386-apple-darwin» .sharedlibrary apply-load-rules all Присоединение к процессу 4216. (ГБД)

В другом представлении

 - (void)viewDidLoad {
NSLog(@"inside view did load");
AppDelegate *delegate=(AppDelegate *)[[UIApplication sharedApplication]delegate];
NSString *titleValue=[delegate getCurrentDates];
self.navigationItem.title =titleValue ;
}

Функция get не работает должным образом. Она работает нормально, если я даю статическую строку или "dateval".

Спасибо.

1 Ответ

2 голосов
/ 21 апреля 2010

outputDate, похоже, не сохраняется, поэтому значение теряется в конце цикла событий (из-за NSAutoreleasePool).

Вы должны сохранить outputDate, чтобы избежать его выпуска с чем-то вроде этого в делегате:

- (void)setCurrentDates:(NSString *)value {
    [value retain]; // <- Retain new value
    [date release]; // <- Release old value;
    date = value;
}

Лучшим решением было бы иметь объявленное свойство в делегате с атрибутом retain.

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