bra*_*ray 10 ios swift alamofire
编辑:问题不是关于什么-999的意思,但为什么我没有得到第一个代码片段的错误,但第二个?除了在第二个代码片段中使用Alamofire.Manager(它应该与第一个代码片段中的Alamofire.request相同),一切都是相同的.这是一个错误,还是我错过了什么?
我有一个与Alamofire.request合作的功能......
func getMenuFromIsoShortDate(menuDate: String) {
let user = Constants.DummyCredentials.UserName
let password = Constants.DummyCredentials.PassWord
var urlString = ""
let dateForWebservice: NSDate? = NSDate.dateFromIsoString(menuDate)
if let dateForWebservice = dateForWebservice {
urlString = Constants.WebservicePath.DailyMenu + NSDate.dateToIsoSlash(dateForWebservice)
println("urlString: \(urlString)")
}
let credential = NSURLCredential(user: user, password: password, persistence: .ForSession)
Alamofire.request(.GET, urlString)
.authenticate(usingCredential: credential)
.response {
(request, response, data, error) in
if let response = response {
var statusCode = response.statusCode
println("-->statusCode: \(statusCode)")
}
if (error == nil) {
var serializationError: NSError?
let jsonData: AnyObject? = NSJSONSerialization.JSONObjectWithData(data! as! NSData, options: NSJSONReadingOptions.AllowFragments, error: &serializationError)
var parser: Parser = Parser()
let menu: Menu = parser.parseMenuJSON(jsonData)
var dataAccess: DataAccess = DataAccess.sharedInstance
dataAccess.addMenu(menu)
} else {
println("Webservice error: \(error)")
}
}
}
Run Code Online (Sandbox Code Playgroud)
但是当我使用manager.request运行代码时 - 它会运行,但会给我一个-999错误.这里改变了代码:
func getMenuFromIsoShortDate(menuDate: String) {
let user = Constants.DummyCredentials.UserName
let password = Constants.DummyCredentials.PassWord
var urlString = ""
let dateForWebservice: NSDate? = NSDate.dateFromIsoString(menuDate)
if let dateForWebservice = dateForWebservice {
urlString = Constants.WebservicePath.DailyMenu + NSDate.dateToIsoSlash(dateForWebservice)
println("urlString: \(urlString)")
}
let credential = NSURLCredential(user: user, password: password, persistence: .ForSession)
let configuration = NSURLSessionConfiguration.defaultSessionConfiguration()
manager = Alamofire.Manager(configuration: configuration)
manager.request(.GET, urlString)
.authenticate(usingCredential: credential)
.response {
(request, response, data, error) in
if let response = response {
var statusCode = response.statusCode
println("-->statusCode: \(statusCode)")
}
if (error == nil) {
var serializationError: NSError?
let jsonData: AnyObject? = NSJSONSerialization.JSONObjectWithData(data! as! NSData, options: NSJSONReadingOptions.AllowFragments, error: &serializationError)
var parser: Parser = Parser()
let menu: Menu = parser.parseMenuJSON(jsonData)
var dataAccess: DataAccess = DataAccess.sharedInstance
dataAccess.addMenu(menu)
} else {
println("Webservice error: \(error)")
}
}
}
Run Code Online (Sandbox Code Playgroud)
这里的错误信息:
Webservice error: Optional(Error Domain=NSURLErrorDomain Code=-999 "Abgebrochen" UserInfo=0x7f8f11c3f210 {NSErrorFailingURLKey=http://test.myserver.de:18507/app/services/mampf/get-menu/2015/05/08, NSLocalizedDescription=Abgebrochen, NSErrorFailingURLStringKey=http://test.myserver.de:18507/app/services/mampf/get-menu/2015/05/08})
Run Code Online (Sandbox Code Playgroud)
这有什么问题?
cno*_*oon 12
我可以看到两个可能的问题.
第一个明显的问题是您是否将自定义manager实例保留在内存中.您需要在属性中保留管理器,以确保它不会在请求中间取消分配.
Alamofire.request和您之间的唯一区别manager.request是您manager缺少默认情况下Alamofire共享管理器附加的默认标头.
public static let sharedInstance: Manager = {
let configuration: NSURLSessionConfiguration = NSURLSessionConfiguration.defaultSessionConfiguration()
configuration.HTTPAdditionalHeaders = Manager.defaultHTTPHeaders
return Manager(configuration: configuration)
}()
Run Code Online (Sandbox Code Playgroud)
我会在管理器初始化中添加以下行,看看是否能使行为保持一致.
let configuration = NSURLSessionConfiguration.defaultSessionConfiguration()
configuration.HTTPAdditionalHeaders = Alamofire.Manager.defaultHTTPHeaders
manager = Alamofire.Manager(configuration: configuration)
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助您解决问题的根源.我不清楚为什么缺少默认标题会导致您看到的问题,但如果无法访问您的项目,则很难进一步挖掘.
| 归档时间: |
|
| 查看次数: |
3750 次 |
| 最近记录: |