iPhone SDK:viewDidLoad中()看到一个空的NSArray,但它填充在一个委托方法(MGTwitterEngine)

StackOverflow https://stackoverflow.com/questions/1854345

这可能是显而易见的,但我有点新手,并花了几个小时试图弄清楚这一点。

在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空的,因为你的委托方法不能被称为直到返回控制到您的运行循环。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top