alamofire 在模拟器中给出了准确的响应,但在设备中给出了错误
alamofire gives exact response in simulator but gives error in device
我是第一次使用 swift 语言进行项目。我已经将 alamofire 用于 Web 服务 api。我为它创建了一个通用的func
。
class func postWebService(methodname:String,param:NSDictionary,userName:String,password:String, CompletionHandler:(success:Bool,response:NSDictionary) -> ())
{
let mainlink :String = "mymainurl"
var link = mainlink + methodname
var url:NSURL = NSURL(string: link)!
let plainString = "\(userName):\(password)" as NSString
// example : let plainString = "textuser:testpwd" as NSString
let plainData = plainString.dataUsingEncoding(NSUTF8StringEncoding)
let base64String = plainData?.base64EncodedStringWithOptions(NSDataBase64EncodingOptions(rawValue: 0))
Manager.sharedInstance.session.configuration.HTTPAdditionalHeaders = ["Authorization": "Basic " + base64String!]
request(.GET, url, parameters: param as? [String : AnyObject]).responseJSON { (req, res, jsonresp, error) -> Void in
if(error != nil) {
NSLog("Error: \(req) \(error)")
var errDict:NSDictionary = ["message":"\(error?.localizedDescription)"]
CompletionHandler(success: false,response: errDict)
}
else {
var json: NSDictionary = jsonresp! as! NSDictionary
NSLog("%@",json)
CompletionHandler(success: true,response: json)
}
}
}
它工作正常,当我在模拟器中 运行 时它给我响应。但是如果我在设备中加载我的项目而不是它给我一个错误
Optional(Error Domain=NSCocoaErrorDomain Code=3840 "The operation couldn’t be completed. (Cocoa error 3840.)" (Invalid value around character 0.) UserInfo=0x17dc4580 {NSDebugDescription=Invalid value around character 0.})
如果代码中存在问题,那么它也不应该在模拟器中工作。它是用于 Web 服务 api 的很好的工作代码。任何帮助将不胜感激。提前致谢。
==== 编辑====
提及:它是服务器 url。
我又想通了一件事。如果我 运行 此代码在 ios 8 及更高版本的设备中工作正常。而这个问题发生在ios 7台设备上。我正在用 ios7 处理 iPod。我已经检查了 ios8 台设备,例如 iPhone 和 iPad,它工作正常。
可能是也可能不是你的情况,但我曾经在访问不正确的 url 时遇到过该错误。在我的例子中,它指向本地主机,这对模拟器来说是完美的,但在设备上完全没用。
仔细检查您的 URL,确保网络服务在线并且可以从您的设备访问...
希望这有帮助,如果没有其他人会插话 ;)
我研究过这个,主要是查了所有资料of Alamofire on github。在此页面中,我找到了解决方案,我的主要错误是 Alamofire 不支持 ios 7。它需要 ios 8+。
以上我的代码是正确的,适用于 Web 服务 api。 URL 和 Code 都没有问题。我的问题是 ios 7.0 不受支持,所以出现了这个问题。
所以,这是我自己的错误,而不是 Alamofire 框架或代码的错误。但是它应该支持 ios7,因为我们的项目不能忽略 ios 版本 7。可能有很多设备具有 ios7。感谢大家的支持。
我是第一次使用 swift 语言进行项目。我已经将 alamofire 用于 Web 服务 api。我为它创建了一个通用的func
。
class func postWebService(methodname:String,param:NSDictionary,userName:String,password:String, CompletionHandler:(success:Bool,response:NSDictionary) -> ())
{
let mainlink :String = "mymainurl"
var link = mainlink + methodname
var url:NSURL = NSURL(string: link)!
let plainString = "\(userName):\(password)" as NSString
// example : let plainString = "textuser:testpwd" as NSString
let plainData = plainString.dataUsingEncoding(NSUTF8StringEncoding)
let base64String = plainData?.base64EncodedStringWithOptions(NSDataBase64EncodingOptions(rawValue: 0))
Manager.sharedInstance.session.configuration.HTTPAdditionalHeaders = ["Authorization": "Basic " + base64String!]
request(.GET, url, parameters: param as? [String : AnyObject]).responseJSON { (req, res, jsonresp, error) -> Void in
if(error != nil) {
NSLog("Error: \(req) \(error)")
var errDict:NSDictionary = ["message":"\(error?.localizedDescription)"]
CompletionHandler(success: false,response: errDict)
}
else {
var json: NSDictionary = jsonresp! as! NSDictionary
NSLog("%@",json)
CompletionHandler(success: true,response: json)
}
}
}
它工作正常,当我在模拟器中 运行 时它给我响应。但是如果我在设备中加载我的项目而不是它给我一个错误
Optional(Error Domain=NSCocoaErrorDomain Code=3840 "The operation couldn’t be completed. (Cocoa error 3840.)" (Invalid value around character 0.) UserInfo=0x17dc4580 {NSDebugDescription=Invalid value around character 0.})
如果代码中存在问题,那么它也不应该在模拟器中工作。它是用于 Web 服务 api 的很好的工作代码。任何帮助将不胜感激。提前致谢。
==== 编辑====
提及:它是服务器 url。
我又想通了一件事。如果我 运行 此代码在 ios 8 及更高版本的设备中工作正常。而这个问题发生在ios 7台设备上。我正在用 ios7 处理 iPod。我已经检查了 ios8 台设备,例如 iPhone 和 iPad,它工作正常。
可能是也可能不是你的情况,但我曾经在访问不正确的 url 时遇到过该错误。在我的例子中,它指向本地主机,这对模拟器来说是完美的,但在设备上完全没用。 仔细检查您的 URL,确保网络服务在线并且可以从您的设备访问... 希望这有帮助,如果没有其他人会插话 ;)
我研究过这个,主要是查了所有资料of Alamofire on github。在此页面中,我找到了解决方案,我的主要错误是 Alamofire 不支持 ios 7。它需要 ios 8+。
以上我的代码是正确的,适用于 Web 服务 api。 URL 和 Code 都没有问题。我的问题是 ios 7.0 不受支持,所以出现了这个问题。
所以,这是我自己的错误,而不是 Alamofire 框架或代码的错误。但是它应该支持 ios7,因为我们的项目不能忽略 ios 版本 7。可能有很多设备具有 ios7。感谢大家的支持。