私は Objective-C を初めて使用し、ユーザー インターフェイスの一部のデータを更新するために汎用 API へのバックグラウンド ポーリングを必要とするアプリを構築しています。私の問題に合った回答/例を数時間探した後、次のような解決策に出くわしました。
http://blog.sortedbits.com/async-downloading-of-data/
しかし、残念ながら、それらのどれも本当に基本的な私のシナリオをカバーしていません: viewDidLoad
API を呼び出すために、無限ループとしましょう。10 秒ごととしましょう。を使用してコンソールにそのデータを送信しNSLog
ます。明らかに、これはメインスレッドでは実行できません。
私が本当に必要としているのは、それを行う方法の非常に簡単な例です。
- 多くの理由で長いポーリング/プッシュ通知を実装できず、それを行う方法を探していません。できないと仮定しましょう。
LRResty
、RESTKit
、またはその他のような派手なフレームワークAFNetworking
は必要ありません。また、この基本的なシナリオをカバーできる SDK 速報がないことも信じられません。- 私が説明した以外に何も必要ないので、認証、リクエストのパラメーター、応答処理などは必要ありません(私はobjective-cに不慣れで、厳密に必要ではないものは私を混乱させる可能性があります. ..)
私が探している解決策は、次のようなものです(NSOperationQueueを使用してループを別のスレッドに実行します):
- (void)viewDidLoad {
[super viewDidLoad];
//To run polling on a separate thread
operationQueue = [NSOperationQueue new];
NSInvocationOperation *operation=[[NSInvocationOperation alloc] initWithTarget:self selector:@selector(doPolling) object:nil];
[operationQueue addOperation:operation];
}
-(void)doPolling {
MyDao *myDao = [MyDao new];
while (true) {
[myDao callApi];
[NSThread sleepForTimeInterval:10];
}
}
// and in MyDao
-(void)callApi {
NSMutableString *url= [NSMutableString stringWithFormat:@"%@",@"http:www.example.it"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:url]];
request.HTTPMethod = @"GET";
self.conn= [[NSURLConnection alloc] initWithRequest:request delegate:self];
if(self.conn){
[self.conn start];
}
}
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
NSLog(@"didReceiveData %s","yes");
}
残念ながら、ここで述べたように: NSOperation を使用した非同期 NSURLConnectionは、私にはできないようです。
助けてください。この基本的なシナリオには単純で直接的な解決策がないとは信じていません。