1

URLからフィードを取得し、テーブルビューに投稿を表示するIOS 5アプリを開発しています。フィード内の投稿を含むテーブル セルを読み込むビュー コントローラーがあります。これはすべて完璧に機能します。

SVProgressHUDただし、フィードが別のスレッドにロードされている間に表示するために を使用したかったのです。

したがって、私の-(void)viewDidLoad方法では次のようになります。

- (void)viewDidLoad
{
    [super viewDidLoad];
    [SVProgressHUD showInView:self.view status:@"loading.." networkIndicator:YES];
    dispatch_async(kBgQueue, ^{NSData* data = [NSData dataWithContentsOfURL: latestFeedURL];
    [self performSelectorOnMainThread:@selector(fetchedData:) withObject:data waitUntilDone:YES];});

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(foregroundRefresh:) name:UIApplicationWillEnterForegroundNotification object:nil];

    self.pull = [[PullToRefreshView alloc] initWithScrollView:(UIScrollView *) self.feedTableView];
    [self.pull setDelegate:self];
    [self.feedTableView addSubview:self.pull];

    self.title = @"Latest";
}

- (void)fetchedData:(NSData *)responseData {
    //parse out the json data
    NSError* error;
    NSDictionary* json = [NSJSONSerialization JSONObjectWithData:responseData options:kNilOptions error:&error];

    NSMutableArray* latestFeed = [json objectForKey:@"posts"]; //2

    self.feedUpLoads = latestFeed; 
    NSLog(@"objects: %@", latestFeed); //3
    [self.feedTableView reloadData];
    [SVProgressHUD dismiss];
}

これはすべて正常に機能し、バックグラウンド スレッドに読み込まれるデータを取得し、テーブルに必要なすべての詳細を含む投稿が表示されます。私が抱えている問題は、SVProgressHUDがまったく表示されないことです。fetchData メソッドに行を入れても、[SVProgressHUD showInViewまだ表示されません。(ちなみに、メソッドSVProgressHUDでたとえば実際に表示できるので、コードが機能することを知っています。viewWillAppear

私がそれを呼び出している時点でビューがまだ完全に存在していないため、機能していないと思いますか? しかし、その場合、フィードが呼び出されている間に表示されるようにどこで呼び出す必要があり、どこで削除する必要がありますか?

どんな助けでも大歓迎です!前もって感謝します!!

4

1 に答える 1

4

同様の問題を抱えている他の人にとって、これは、長いループまたは実行に時間がかかるコードがあるために発生する可能性もあります。これが発生すると、ループが終了するまで進行状況バーが表示されず、目的に反します。

この問題を解決するには、次のものが必要です。

  • (void)performSelectorInBackground:(SEL)aSelector withObject:(id)arg

基本的に、コードは次のようになります。

- (IBAction)submitPost:(id)sender {
    //now we show the loading bar and submit the comment
    [SVProgressHUD showWithStatus:@"Submitting post" maskType:SVProgressHUDMaskTypeGradient];
    SEL aSelector = @selector(submitDataOfPost);
    [self performSelectorInBackground:aSelector withObject:sender];
}

これにより、基本的に進行状況バーが読み込まれ、バックグラウンド スレッドで、実行するメソッドが呼び出されます。これにより、コードが実行されると同時に UI が更新されます (進行状況を表示します)。

于 2012-09-07T09:54:23.833 に答える