gpt4 book ai didi

ios - 在 -[NSURLResponse allHeaderFields] 中崩溃

转载 作者:行者123 更新时间:2023-11-29 01:29:14 25 4
gpt4 key购买 nike

如果我的应用程序是从 AppStore 下载的,那么在加载网页时它会经常崩溃,但我无法在 Debug模式下重复崩溃。崩溃日志说:

-[NSURLResponse allHeaderFields]: unrecognized selector sent to instance 0x1590902e0

但我确定我的代码中没有“allHeaderFields”调用。

我编写了自定义 url 缓存以将 html 和 js 缓存到磁盘。这可能会导致错误,但我找不到。

- (NSCachedURLResponse *)cachedResponseForRequest:(NSURLRequest *)request {
...here is some code not important

NSString *versionUrl = [self versionUrl:url];
NSString *fileName = [self cacheRequestFileName:versionUrl];
NSString *otherInfoFileName = [self cacheRequestOtherInfoFileName:versionUrl];
NSString *filePath = [self cacheFilePath:fileName];
NSString *otherInfoPath = [self cacheFilePath:otherInfoFileName];
NSDate *date = [NSDate date];

NSFileManager *fileManager = [NSFileManager defaultManager];
if ([fileManager fileExistsAtPath:filePath]) {
BOOL expire = false;
NSDictionary *otherInfo = [NSDictionary dictionaryWithContentsOfFile:otherInfoPath];
if (self.cacheTime > 0) {
NSInteger createTime = [[otherInfo objectForKey:@"time"] intValue];
if (createTime + self.cacheTime < [date timeIntervalSince1970]) {
expire = true;
}
}
if (expire == false) {
NSData *data = [NSData dataWithContentsOfFile:filePath];
NSURLResponse *response = [[NSURLResponse alloc] initWithURL:request.URL
MIMEType:[otherInfo objectForKey:@"MIMEType"]
expectedContentLength:data.length
textEncodingName:[otherInfo objectForKey:@"textEncodingName"]];
NSCachedURLResponse *cachedResponse = [[[NSCachedURLResponse alloc] initWithResponse:response data:data] autorelease];
[response release];
return cachedResponse;
} else {

[fileManager removeItemAtPath:filePath error:nil];
[fileManager removeItemAtPath:otherInfoPath error:nil];
}
}

__block NSCachedURLResponse *cachedResponse = nil;
//sendSynchronousRequest请求也要经过NSURLCache
id boolExsite = [self.responseDictionary objectForKey:url];
if (boolExsite == nil) {
[self.responseDictionary setValue:[NSNumber numberWithBool:TRUE] forKey:url];

__block CustomURLCache *weakSelf = self;
[NSURLConnection sendAsynchronousRequest:request queue:[[[NSOperationQueue alloc] init] autorelease] completionHandler:^(NSURLResponse *response, NSData *data,NSError *error)
{
[weakSelf.responseDictionary removeObjectForKey:url];

if (error) {
cachedResponse = nil;
}else if(data){
NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:[NSString stringWithFormat:@"%f", [date timeIntervalSince1970]], @"time",
response.MIMEType, @"MIMEType",
response.textEncodingName, @"textEncodingName", nil];
[dict writeToFile:otherInfoPath atomically:YES];
[data writeToFile:filePath atomically:YES];

cachedResponse = [[[NSCachedURLResponse alloc] initWithResponse:response data:data] autorelease];
}

}];

return cachedResponse;

}
return nil;
}

这里是线程崩溃日志:

CoreFoundation    0x182154f74    ___exceptionPreprocess (in CoreFoundation) + 148
libobjc.A.dylib 0x196c5bf80 objc_exception_throw
CoreFoundation 0x18215bc6c ___methodDescriptionForSelector (in CoreFoundation) + 0
CoreFoundation 0x182158c14 ____forwarding___ (in CoreFoundation) + 872
CoreFoundation 0x18205cdcc __CF_forwarding_prep_0 (in CoreFoundation) + 92
myappname 0x100566a9c _isCacheValid + 152
myappname 0x100567ca4 -[_priv_NBSURLProtocol startLoading] + 368
CFNetwork 0x18194fda8 ____ZN19URLConnectionLoader27_private_ScheduleOriginLoadEPK12NSURLRequestPK20_CFCachedURLResponse_block_invoke_2 (in CFNetwork) + 72
CFNetwork 0x181843ca0 ____ZNK19URLConnectionLoader25withExistingProtocolAsyncEU13block_pointerFvP11URLProtocolE_block_invoke (in CFNetwork) + 32
libdispatch.dylib 0x197455770 <redacted>
libdispatch.dylib 0x19745ea54 <redacted>
CFNetwork 0x181843c70 __ZN19RunloopBlockContext13_invoke_blockEPKvPv (in CFNetwork) + 36
CoreFoundation 0x1820387ec _CFArrayApplyFunction (in CoreFoundation) + 68
CFNetwork 0x181843b54 __ZN19RunloopBlockContext7performEv (in CFNetwork) + 136
CFNetwork 0x181843a14 __ZN17MultiplexerSource7performEv (in CFNetwork) + 312
CFNetwork 0x181843840 __ZN17MultiplexerSource8_performEPv (in CFNetwork) + 68
CoreFoundation 0x18210c5a4 ___CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ (in CoreFoundation) + 24
CoreFoundation 0x18210c038 ___CFRunLoopDoSources0 (in CoreFoundation) + 540
CoreFoundation 0x182109d38 ___CFRunLoopRun (in CoreFoundation) + 724
CoreFoundation 0x182038dc0 _CFRunLoopRunSpecific (in CoreFoundation) + 384
WebCore 0x193cab2c8 <redacted>
JavaScriptCore 0x18377b4e4 __ZN3WTFL16threadEntryPointEPv (in JavaScriptCore) + 212
JavaScriptCore 0x18377b3f4 __ZN3WTFL19wtfThreadEntryPointEPv (in JavaScriptCore) + 24
libsystem_pthread.dylib 0x19766bb3c <redacted>
libsystem_pthread.dylib 0x19766baa0 <redacted>
libsystem_pthread.dylib 0x197669030 thread_start

最佳答案

尝试用 NSHTTPURLResponse 替换 NSURLResponse:

NSHTTPURLResponse *response = [[NSHTTPURLResponse alloc] initWithURL:request.URL 
statusCode:200
HTTPVersion:@"1.1"
headerFields:nil];
NSCachedURLResponse *cachedResponse = [[[NSCachedURLResponse alloc] initWithResponse:urlresponse data:data] autorelease];
[response release];
return cachedResponse;

关于ios - 在 -[NSURLResponse allHeaderFields] 中崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33627714/

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