我正試圖在xcode和ios5上工作,並且我有一個TWRequest來使用Twitter Api降低推文。不過,我對iOS5中的塊如何工作感到困惑。例如在此代碼中TwitterRequest塊同步IOS5
[request performRequestWithHandler:^(NSData *responseData, NSHTTPURLResponse *urlResponse, NSError *error) {
NSDictionary *dictionary = [NSJSONSerialization JSONObjectWithData:responseData options:0 error:&error];
NSArray* firstParse = [dictionary objectForKey:@"results"];
for (NSDictionary *post in firstParse) {
Tweet *tweetMessage = [[Tweet alloc] init];
tweetMessage.message = [post objectForKey:@"text"];
tweetMessage.user = [post objectForKey:@"from_user"];
[tweets addObject:tweetMessage];
}
}];
NSLog(@"%@",[tweets count]);
假設我有一個tweets = [NSMutableArray arrayWithCapacity:25];打電話給某個地方。
但是,每次我這樣做,計數總是爲零。在做了一些測試之後,我意識到在NSLog運行之後,代碼塊正在運行,表示代碼沒有按照我的習慣從上到下運行。
有誰知道如何解決這樣的問題?
我也試過這個後面的例子,因爲我試圖鳴叫移動到有一個數組對象
tweetViewController.tweets = [NSMutableArray arrayWithCapacity:25];
[request performRequestWithHandler:^(NSData *responseData, NSHTTPURLResponse *urlResponse, NSError *error) {
NSDictionary *dictionary = [NSJSONSerialization JSONObjectWithData:responseData options:0 error:&error];
NSArray* firstParse = [dictionary objectForKey:@"results"];
for (NSDictionary *post in firstParse)
{
Tweet *tweetMessage = [[Tweet alloc] init];
tweetMessage.message = [post objectForKey:@"text"];
tweetMessage.user = [post objectForKey:@"from_user"];
[tweetViewController.tweets addObject:tweetMessage];
NSLog(@"%d",[tweets count]);
//NSLog(@"%@: %@", [post objectForKey:@"from_user"], [post objectForKey:@"text"]);
}
}];
Tweet *tweetMessage = [[Tweet alloc] init];
tweetMessage.message = @"HELLO";
tweetMessage.user = @"HELLO";
[tweetViewController.tweets addObject:tweetMessage];
return YES;
的Hello報文正常顯示,但該塊中的那些做不成的viewController。
如果你不是絕對必須的,不要做同步代碼。 – 2011-12-31 23:38:58
那麼我會如何調用請求? – Jetpackman 2012-01-01 00:29:11
就像這樣,但我的意思是你應該簡單*允許*代碼異步執行。將與推文加載相關的代碼放在代碼塊中。 – 2012-01-01 00:31:18