UITableViewsを使用し、サーバーからデータをフェッチするアプリがあります。UIActivityIndicatorViewを親UITableViewに配置しようとしているので、子UITableViewの読み込み中に回転します。UIActivityIndicatorViewはすべてInterfaceBuilderなどを介して接続されています。
-(void)spinTheSpinner {
NSLog(@"Spin The Spinner");
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
[spinner startAnimating];
[NSThread sleepForTimeInterval:9];
[self performSelectorOnMainThread:@selector(doneSpinning) withObject:nil waitUntilDone:NO];
[pool release];
}
-(void)doneSpinning {
NSLog(@"done spinning");
[spinner stopAnimating];
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
[NSThread detachNewThreadSelector:@selector(spinTheSpinner) toTarget:self withObject:nil];
NSMutableString *tempText = [[NSMutableString alloc] initWithString:[categoryNumber objectAtIndex:indexPath.row]];
Threads *viewController = [[Threads alloc] initWithNibName:@"newTable" bundle:nil tagval:tempText SessionID:PHPSESSID];
[self.navigationController pushViewController:viewController animated:YES];
[tableView deselectRowAtIndexPath:indexPath animated:YES];
[viewController release];
}
したがって、子UITableViewを画面にプッシュすると、UIActivityIndicatorView(スピナー)は親UITableViewのそこに配置されます。子UITableViewに移動し、すぐに親ビューに戻ると、回転する動作でUIActivitIndicatorViewをキャッチできます。NSLogは正しい時刻に表示されます。親UITableViewのセルを最初にタップすると、「SpinTheSpinner」がログに表示されます。9秒後、ログに「回転が完了」しますが、時間内に親UITableViewに戻らない限り、スピナーは回転しません。
これが正しく機能しない理由のアイデア?