iPhone SDK:のviewDidLoad()が空にNSArray見ているが、それはデリゲートメソッド(MGTwitterEngine)に読み込まれます
-
13-09-2019 - |
質問
これはおそらく明白ですが、私は初心者のビットだとこれを理解しようとしている時間を費やしています。
の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
に空になります