iPhone SDK : ViewDidload ()는 빈 NSARRAY를 보지만 대의원 방법 (MGTWitterEngine)으로 채워져 있습니다.

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

문제

이것은 아마도 분명하지만, 나는 약간의 초보자이며 이것을 알아 내기 위해 몇 시간을 보냈습니다.

ViewDidLoad ()에는 입력과 함께 mgtwitterEngine 객체 (사용자 정의 객체)의 함수를 호출합니다. 요청 (트위터,이 경우)이 성공한 경우 적절한 대의원 방법을 호출합니다.

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