iOS 6 の Apple の新しい UIRefreshControl は歓迎すべき新機能ですが、組み込みのタイムアウト メカニズムはないようです。
必要な理由は次のとおりです。
ユーザーが更新をプルするとしましょう。コードがサーバーからデータを取得しようとしている間、スピン モードになります。サーバーは応答せず、糸車が永久に回転します。したがって、それを停止するタイムアウトメカニズムが必要です。
それを実装する最良の方法は何ですか?
iOS 6 の Apple の新しい UIRefreshControl は歓迎すべき新機能ですが、組み込みのタイムアウト メカニズムはないようです。
必要な理由は次のとおりです。
ユーザーが更新をプルするとしましょう。コードがサーバーからデータを取得しようとしている間、スピン モードになります。サーバーは応答せず、糸車が永久に回転します。したがって、それを停止するタイムアウトメカニズムが必要です。
それを実装する最良の方法は何ですか?
まず、必要な時間を設定してタイマーを設定します。以下を確認するよう依頼してください。
次のプロパティを使用して、しばらくしてからまだ更新されているかどうかを確認できます
@property (nonatomic, readonly, getter=isRefreshing) BOOL リフレッシュ
その場合は、使用して停止できます
終了さわやか
何かのようなもの :
-(void)checkAndStop{
if(refreshControl.refreshing == YES) // 必要に応じてアラートを表示
[refreshControl endRefreshing];
}
また、NSTimer を作成するよりも消耗が少ない可能性がある、dispatch_after の使用を検討してください。
int64_t delayInSeconds = 2.0;
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC);
dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
code to be executed on the main queue after delay
});
更新を終了するために NSTimer を使用して実装しました。
[NSTimer scheduledTimerWithTimeInterval:60 target:self selector:@selector(handleDataRefreshFailure:) userInfo:nil repeats:NO];
迅速なバージョン:
let delayInSeconds: UInt64 = 2
let popTime = dispatch_time(DISPATCH_TIME_NOW, Int64(delayInSeconds * NSEC_PER_SEC))
dispatch_after(popTime, dispatch_get_main_queue(), {
if refreshControl.refreshing {
refreshControl.endRefreshing()
}
})