Это, вероятно, очевидно, но я немного новичок и потратил часы, пытаясь понять это.
В viewDidLoad () у меня есть вызов функции для объекта MGTwitterEngine (пользовательский объект), с вводом. Если запрос (в данном случае к Twitter) успешен, он вызывает соответствующий метод делегата.
В viewDidLoad () это выглядит так:
[myTwitterEngine getSearchResultsForQuery:@"#quote" sinceID:0 startingAtPage:0 count:10];
Метод делегата, который он вызывает в случае успешного поискового запроса, выглядит следующим образом:
- (void)searchResultsReceived:(NSArray *)searchResults forRequest:(NSString *)connectionIdentifier
{
NSMutableArray *tempArray = [[[NSMutableArray alloc] init] autorelease];
if ([searchResults count] > 0)
{
for (int n=0; n < 15; n++) {
NSDictionary *singleResult = [searchResults objectAtIndex:n];
NSString *fromUser = [singleResult valueForKey:@"from_user"];
NSString *text = [singleResult valueForKey:@"text"];
Message *newMessage = [[Message alloc] initWithUsername:fromUser message:text];
[tempArray addObject:newMessage];
}
self.messages = tempArray;
// Okay, works here.
NSLog(@"From delegate method: \n %@", [[self.messages objectAtIndex:13] theMessage]);
}
}
Вещь, которую я не могу понять, такова: в конце, когда я говорю «Хорошо, работа здесь», становится ясно, что self.messages (NSArray) заполнен информацией, которую я хочу.
Однако self.messages будет пустым, если я вызову его снова в viewDidLoad () после первого метода. Это то, что я сделал в viewDidLoad ():
[myTwitterEngine getSearchResultsForQuery:@"#quote"];
NSLog(@"\n Before Or After? \n");
NSLog(@"From viewDidLoad: %@", [[self.messages objectAtIndex:13] theMessage]);
Результаты странные. Результат первого NSLog предшествует результатам метода делегата. Вот вывод консоли:
2009-12-05 23:15:20.758 Entendu[54463:207]
Before Or After?
2009-12-05 23:15:20.761 Entendu[54463:207] From viewDidLoad: (null)
2009-12-05 23:15:21.005 Entendu[54463:207] Request succeeded for connectionIdentifier = 92B2E7EC-AA2F-4301-812E-E8E5AEAF7035
2009-12-05 23:15:21.007 Entendu[54463:207] From delegate method:
RT @thankfulnotes: RT @felicelam It usually takes me more than three weeks to prepare a good impromptu speech. Mark Twain #quote
В конце концов, я хочу использовать массив сообщений в качестве источника данных для таблицы. Как я могу получить доступ к этой переменной из метода делегата в другом месте в реализации?
Кто-нибудь знает, почему делегирование вывода из метода делегата происходит в конце, даже если я вызывал реальную функцию до NSLog до или после?
Любая помощь приветствуется!