したがって、ViewController が読み込まれるたびに、サーバーにアップロードします。ただし、問題があるようです。かなりの数の非同期リクエストがある場合、アプリがセミクラッシュする可能性があります。つまり、リクエストは通過せず、他のリクエスト (別のスレッドにある) は処理されないということです。その上、キーボードは非常に遅くなります (奇妙なことに私は知っています)。とにかく、それが原因で他のネットワーク要求が送信されないことを考えると、これは深刻な問題です。私が奇妙に思うのは、アップロード リクエストの数がダウンロード リクエストの数と同じであることです (アップロードは何もせず、通常の http リクエストを行うだけです)。これが私のコードです:
- (void)serverUploadAll:(myEntity *)send
{
NSMutableString *urlString = [[NSMutableString alloc] initWithString:ServerApiURL];
NSString *addTargetUrl = [NSString stringWithFormat:@"/addtarget?deviceToken=%@&appVersion=%@&targetId=%@", postToServer.deviceToken, postToServer.appVersion, send.Id];
[urlString appendString:addTargetUrl];
NSURL *url = [NSURL URLWithString:urlString];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
[NSURLConnection sendAsynchronousRequest:request queue:queueTwo completionHandler:^(NSURLResponse *response, NSData *data, NSError *error){
//NSLog(@"response=%@", response);
//NSLog(@"data=%@", data);
//NSLog(@"error=%@", error);
}];
}
上記のコードは、データベースが循環するときに呼び出され、かなりの量の呼び出し (つまり 120 回以上) がある場合に問題が発生します。私のダウンロード リクエストは実際には AFNetworking を使用して行われているため、効率的に動作するのかもしれません。とにかく、要約すると、上記のコードが複数回呼び出されると、なぜジャムして停止するのでしょうか?
助けてくれてありがとう、本当に感謝しています。
よろしく、
マイク
更新:したがって、runmad による素晴らしい回答のおかげで、私は AFNetworking アプローチを使用していますが、このエラーでクラッシュします-[AFHTTPRequestOperation _propertyForKey:]: unrecognized selector sent to instance
。それが機能しない理由がわかりません。ここに私のコードがあります:
- (void)cycleThroughEntries
{
MyEntity *myEntity;
NSMutableArray *urlRequests;
urlRequests = [[NSMutableArray alloc] init];
for (id i in fetchedResultsController.fetchedObjects) {
myEntity = i;
NSMutableString *urlString = [[NSMutableString alloc] initWithString:ServerApiURL];
NSString *addTargetUrl = [NSString stringWithFormat:@"/addtarget?deviceToken=%@&appVersion=%@&targetId=%@", postToServer.deviceToken, postToServer.appVersion, myEntity.Id];
[urlString appendString:addTargetUrl];
//NSLog(@"URL sent is: %@", urlString);
NSURL *url = [NSURL URLWithString:urlString];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
AFHTTPRequestOperation *requestOperation = [[AFHTTPRequestOperation alloc] initWithRequest:request];
[urlRequests addObject:requestOperation];
}
AFHTTPClient *client = [[AFHTTPClient alloc] initWithBaseURL:[NSURL URLWithString:@""]];
[client enqueueBatchOfHTTPRequestOperationsWithRequests:urlRequests
progressBlock:^(NSUInteger numberOfCompletedOperations, NSUInteger totalNumberOfOperations) {
NSLog(@"%d / %d", numberOfCompletedOperations, totalNumberOfOperations);
}
completionBlock:^(NSArray *operations) {
NSLog(@"All Done!");
}];
}
何が間違っているのか完全にはわからないので、助けていただければ幸いです。ありがとう。
更新 2:修正済み。の配列を作成するべきではありませんでしAFHTTPRequestOperations
たが、通常のNSURLRequests
. 問題が解決しました!!