これはおそらく、ブロックの理解と、おそらく NSOperationQueue がいつどのように動作するかについての理解と関係がありますが、とにかく尋ねます:
私は基本的なフェッチリクエストメソッドを持っています:
- (void)fetchActiveUser:(NSString*)username withPassword:(NSString *)password {
[self setAuthorizationHeaderWithUsername:username password:password];
// SETS FLAG that we are performing a request
fetchModeActive = TRUE;
[self getPath:kTLActiveUserURI parameters:nil success:^(AFHTTPRequestOperation
*operation, id responseObject) {
if ([responseObject isKindOfClass:[NSXMLParser class]]) {
TLPersonParser *personParser = [[TLPersonParser alloc]
initWithParser:responseObject];
[personParser setDelegate: self];
[personParser parsePeople];
[personParser release];
}
// handle stuff here.
NSLog(@"Success!");
fetchModeActive = FALSE;
[[NSNotificationCenter defaultCenter]
postNotificationName:kTLFetchedActiveUserNotification object:nil];
}
failure:^(__unused AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"Failure.");
fetchModeActive = FALSE;
[[NSNotificationCenter defaultCenter]
postNotificationName:kTLFetchedActiveUserNotification object:error];
}];
while(self.fetchModeActive) {
// WHY DOES THIS RUN INFINITELY?
// Both above Success: & Failure: blocks set fetchModeActive = FALSE
// when complete
NSLog(@"fetching....");
}
}
一番下までスクロールすると、待機中のループが表示されます。これが無限に「フェッチ中...」を出力しているのはなぜですか?? success:とfailure:の両方のブロックが fetchModeActive フラグを false に戻しますか?
私の理解では、このフェッチ操作はバックグラウンドで非同期に実行されますが、フェッチは実行されていないようです!
助言がありますか?別のスレッドでフェッチ リクエストを起動する必要がありますか?
ありがとう!