所以每当我的 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
。问题解决了!!