2015-05-11 74 views
0

出于某种原因,我无法从快捷键所需的字典中的键中获取正确的值。这在目标c中起作用。无法从allHeaderFields字典中获取值

var newRequest: NSMutableURLRequest = NSMutableURLRequest(URL: navigationAction.request.URL!) 
newRequest.HTTPMethod = "HEAD" 
var response: NSURLResponse? 
var filename: AnyObject? 
var filetype: AnyObject? 
NSURLConnection.sendSynchronousRequest(newRequest, returningResponse: &response, error: nil) 
if let httpResponse = response as? NSHTTPURLResponse { 
    let allHeaders = httpResponse.allHeaderFields 
    filename = allHeaders["sfn-Document-Filename"] 
    let typeString: AnyObject? = allHeaders["Content-Type"] 
    let typeArray: Array = typeString!.componentsSeparatedByString("/") 
    filetype = typeArray[1] 
} 

本字典对象看起来像这样allHeaders [NSObject : AnyObject] 6 key/value pairs

这里的目标C目前仍然可以工作。

NSMutableURLRequest *newRequest = [NSMutableURLRequest requestWithURL:[request URL]]; 
[newRequest setHTTPMethod:@"HEAD"]; 
NSHTTPURLResponse *response; 
[NSURLConnection sendSynchronousRequest:newRequest returningResponse:&response error: NULL]; 
if ([response respondsToSelector:@selector(allHeaderFields)]) { 
    NSDictionary *dictionary = [response allHeaderFields]; 
    filename = [[response allHeaderFields] objectForKey:@"sfn-Document-Filename"]; 
    NSString *typeString = [dictionary objectForKey:@"Content-Type"]; 
    NSArray *typeArray = [typeString componentsSeparatedByString:@"/"]; 
    filetype = [typeArray objectAtIndex:1]; 
} 

它并不需要做的方式与obj-C一样,它只是这个工作,它似乎是一个良好的开端。

我得到的文件名的值是filename = (AnyObject?) Some

我试图将其更改为:

var filename: String? 
filename = allHeaders["sfn-Document-Filename"] as? String 

但现在我得到一个零字符串和Thread 1: EXC_BAD_ACCESS (code=1, address=0x20)

+0

得到任何错误? –

+1

“我无法从字典中获得正确的值”:这是否意味着您得到错误的值?或者根本没有价值? – Moritz

+0

@EricD。我得到'filename =(AnyObject?)一些' –

回答

0

的原因这一切正在发生是因为字典中的键的值看起来是NSString,并且它找不到String(我认为它们应该是可以互换的)。

无论哪种方式。这样做的工作:

var newRequest: NSMutableURLRequest = NSMutableURLRequest(URL: request.URL!) 
newRequest.HTTPMethod = "HEAD" 
var response: NSURLResponse? 
NSURLConnection.sendSynchronousRequest(newRequest, returningResponse: &response, error: nil) 
var filename: NSString? 
var filetype: String? 
if let httpResponse = response as? NSHTTPURLResponse { 
    let headerString = "sfn-Document-Filename" 
    let headerNSString: NSString = (headerString as NSString) 
    let filetypeString = "Content-Type" 
    let filetypeNSString: NSString = (filetypeString as NSString) 

    var allHeaders = httpResponse.allHeaderFields 

    filename = allHeaders[headerNSString] as? NSString 

    let typeString = allHeaders[filetypeNSString] as? NSString 
    let typeArray = typeString!.componentsSeparatedByString("/") 
    filetype = typeArray[1] 
} 

现在我只需要弄清楚为什么componentsSeparatedByString是不工作...