iPhone SDK:viewDidLoad中()看到一个空的NSArray,但它填充在一个委托方法(MGTwitterEngine)
-
13-09-2019 - |
题
这可能是显而易见的,但我有点新手,并花了几个小时试图弄清楚这一点。
在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)填充了我想要的信息。
。然而,如果我的第一个方法之后再次在viewDidLoad中称之为()self.messages是空的。这是我在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?
任何帮助理解!
解决方案
我一无所知MGTwitterEngine的,但显然是-getSearchResultsForQuery:
异步方法;它会立即返回,一段时间后,当结果是可调用你的委托方法。
,因为结果尚未接收到你的阵列处于-viewDidLoad
空。此外,你的阵列会的总是的是-viewDidLoad
空的,因为你的委托方法不能被称为直到返回控制到您的运行循环。
不隶属于 StackOverflow