- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
如果我的应用程序是从 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/
我用这个向 web 服务器发出 http 请求: NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL: [N
我正在向这个地址发送一个对象:https://sandbox.itunes.apple.com/verifyReceipt 与 NSUrlconnection我正在尝试使用此委托(delegate)方
我有一个简单的 NSURLRequest: [NSURLConnection sendAsynchronousRequest:myRequest queue:queue completionHandl
我在特定文件夹上设置了 NSURLCache(../../Application Support/Offline 所以它不会被操作系统随机删除),然后我发送一个带有 NSURLRequestRetur
我正在尝试在发出后续请求之前处理每个请求的数据。这里有两个方法,第二个方法是在第一个方法中使用 dispatch_semaphore 调用的,以确保请求完成,但是,这不会等到响应实际被接收/处理后才会
下载文件时,我希望能够继续下载。例如: NSFileManager *fm = [NSFileManager defaultManager]; NSString *downloadTempPath =
我在 HTTP header 中使用 if-modified-since 来决定是否应该下载文件。应用程序已经过测试,一切正常,但现在当我询问我的 NSHTTPURLResponse 实例 respo
我有一个验证用户身份的好方法,但是我不知道如何获取请求的状态代码。当我执行 NSLog(@"%@", response); 时,我可以清楚地看到它存在,但我找不到任何方法将其拉出来。有没有一种方法,还
我需要修改 NSURLResponse 中的响应 header 。这可能吗? 最佳答案 我刚刚和一个 friend 讨论过这个问题。我的建议是编写 NSURLResponse 的子类。大致如下: @i
正如 Apple 文档所述,如果协议(protocol)实现未将内容长度报告为响应的一部分,则 NSURLResponse 的 expectedContentLength 可能不会返回该值。那么,有没
我正在尝试找出如何从我的 http 响应中解析 JSON。目前我正在使用 NSURLSession 任务来发送发布请求并获得如下响应和结果: NSURLSessionConfiguration *de
请原谅我问这个愚蠢的问题,但是有人可以告诉我 NSURLResponse 和 NSHTTPURLResponse 之间有什么区别 最佳答案 "NSURLResponse declares the pr
我正在创建一个在每个 View Controller 上调用 Web 服务的应用程序。该应用程序在模拟器上运行良好,但在实际设备上,它运行速度非常慢,或者有时会返回空响应,这就是应用程序因服务器的
如果我的应用程序是从 AppStore 下载的,那么在加载网页时它会经常崩溃,但我无法在 Debug模式下重复崩溃。崩溃日志说: -[NSURLResponse allHeaderFields]: u
我正在向 API 发出 POST 请求,并在 Swift 中成功获得响应。下面是我的代码。 private func getData(url: NSURL) { let config: NSU
这是我的下载代码: let url = NSURL(string:"http://www.zastavki.com/pictures/originals/2013/Photoshop_Image_of
我覆盖了 NSURLProtocol 并且需要返回带有特定状态码的 HTTP 响应。 NSHTTPURLResponse 没有 statusCode setter ,所以我尝试用以下方法覆盖它: @i
我正在编写一个使用 NSURLConnection 与服务器连接的应用程序。 在委托(delegate)方法 didreceiveresponse 中,如果状态代码为 404,我将取消连接并显示一条消
我看过很多代码,包括 Apple 的 SimpleURLConnections 示例,它们只是将任何 NSURLResponse 转换为 NSHTTPURLResponse。如果它始终是 NSHTTP
我在这方面相当陌生.. 我有一个运行的 tomcat 服务器,我有一个 web 服务方法,当被调用时,返回一个字符串。当我尝试使用 NSOperationQueue *backgroundQueue
我是一名优秀的程序员,十分优秀!