gpt4 book ai didi

ios - 尝试在后台上传时 NSURLSessionUploadTask 崩溃

转载 作者:行者123 更新时间:2023-11-28 22:10:31 29 4
gpt4 key购买 nike

在我的应用程序中,当应用程序进入后台时,我尝试将一些数据上传到服务器。这是我正在使用的代码:

session

self.session = [self backgroundSession];

我的 session 是这样设置的

- (NSURLSession *)backgroundSession
{
static NSURLSession *session = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration backgroundSessionConfiguration:@"com.uploadSession"];
configuration.HTTPMaximumConnectionsPerHost = 1;
session = [NSURLSession sessionWithConfiguration:configuration delegate:self delegateQueue:nil];
});
return session;
}

开始上传

- (void)applicationDidEnterBackground:(UIApplication *)application
{
[self uploadPossibleDrives];
}

上传

// Start uploading the remaing gps log in th right order:

NSOperationQueue *queue = [[NSOperationQueue alloc] init];
[queue setMaxConcurrentOperationCount:1];

for (int i = 0; i < arrayOfGPSLogChunks.count; i++)
{

// This will ensure the chunks are sent in the right order
// Add an operation as a block to a queue:

[queue addOperationWithBlock: ^ {

NSData *requestData;
NSMutableURLRequest *request;

if (i == 0)
{
NSLog(@"Initial drive upload %i",ID.integerValue);

requestData = [NSJSONSerialization dataWithJSONObject:historyToUpload options:NSJSONWritingPrettyPrinted error:nil];
request = [[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:kInitialUploadDriveURL];
[request setHTTPMethod:@"POST"];
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
[request setValue:[NSString stringWithFormat:@"%d", [requestData length]] forHTTPHeaderField:@"Content-Length"];

}
else
{
NSLog(@"Chunk %i",i);

NSMutableDictionary *chunk = [[NSMutableDictionary alloc] init];
[chunk setObject:driveID forKey:@"driveID"];
[chunk setObject:[arrayOfGPSLogChunks objectAtIndex:i] forKey:@"gpsLog"];

requestData = [NSJSONSerialization dataWithJSONObject:chunk options:NSJSONWritingPrettyPrinted error:nil];
request = [[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:kUploadDrivesChunkURL]];
[request setHTTPMethod:@"POST"];
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
[request setValue:[NSString stringWithFormat:@"%d", [requestData length]] forHTTPHeaderField:@"Content-Length"];


}

NSLog(@"_session: %@",self.session);
NSLog(@"request: %@",request);
NSLog(@"requestData: %lu",(unsigned long)requestData.length);
NSLog(@"uploadTask: %@",self.uploadTask);

self.uploadTask = [self.session uploadTaskWithRequest:request fromData:requestData];
[self.uploadTask resume];

if (i == arrayOfGPSLogChunks.count-1)
{
// All gps logs were uploaded so now we save its state as 'uploaded to server':
NSLog(@"Finished sending to server!");
[self setSentToServerForDriveID:ID];
}

}];

}

错误

现在这是我得到的错误:

enter image description here

我真的希望有人能帮助我。我已经调查了我所知道的一切,但似乎无法弄清楚出了什么问题。我也尝试在不使用 block 的情况下上传,但结果是一样的。

如有任何帮助,我们将不胜感激!

最佳答案

对于使用 backgroundSessionConfiguration 创建的 NSURLSession,您必须使用 uploadTaskWithRequest:fromFile:

看到这个问题:NSURLSession and stream upload in background

关于ios - 尝试在后台上传时 NSURLSessionUploadTask 崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23056949/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com