2014-10-03 86 views
0

我试图执行一个NSURLProtocol如下面的教程解释说:http://www.raywenderlich.com/76735/using-nsurlprotocol-swiftNSURLProtocol和迅速 - 错误ios7

一切工作正常与iOS8上,但在iOS7我startLoading得到一个运行时错误()。

override func startLoading() { 
    var newRequest = self.request.copy() as NSMutableURLRequest //<- this line fails 
    NSURLProtocol.setProperty(true, forKey: "MyURLProtocolHandledKey", inRequest: newRequest) 

    self.connection = NSURLConnection(request: newRequest, delegate: self) 
} 

错误:WebCore的:CFNetwork的装载机(10):EXC_BREAKPOINT

有谁有成功实施了NSURLProtocol?谢谢!

+0

如果你使用'var newRequest = self.request.mutableCopy()作为NSMutableURLRequest',它会起作用吗?因为我不希望copy()返回一个可变的请求。 – 2014-10-03 14:01:39

+0

感谢马特,这是工作! – Reinhold 2014-10-08 08:26:14

+0

很酷;我已经添加了这个答案。 – 2014-10-08 09:25:59

回答

0

您的问题是一个(非可变)的NSURLRequest的副本是另一个非 - 可变的NSURLRequest,因此无法转换为NSMutableURLRequest。尝试:

var newRequest = self.request.mutableCopy() as NSMutableURLRequest // mutableCopy() instead of copy() 

这应该给你一个原始请求的可变副本,这应该很好地转换。

1

好像XCode中(6.0.1)的最新版本,它是不可能投NSURLRequestNSMutableURLRequest

这里是迅速的编译器错误消息:

'NSURLRequest' is not convertible to 'NSMutableURLRequest' 

您可以创建一个的NSMutableURLRequest例如在这种替代方式

var newRequest = NSMutableURLRequest(URL: self.request.URL, 
       cachePolicy: self.request.cachePolicy, 
       timeoutInterval: self.request.timeoutInterval) 
+0

谢谢,安东尼!只是为了提高自己,你是如何看到swift编译器错误信息的?我看到的唯一提示是CFNetwork Loader错误。 – Reinhold 2014-10-06 13:23:47

+0

我只是觉得它是类型转换的问题。我在操场上写了一个简单的类型投射,并迅速发出上述错误信息。所以你不会在你的项目中看到这个特殊的错误信息 – 2014-10-06 22:46:03

+0

Anthony,在一些需要登录的页面上我的解决方案遇到麻烦。像Matt建议的那样创建一个可变副本。 – Reinhold 2014-10-08 08:27:23