为什么 RestKit 会剥离我的 URL、swift?
Why is RestKit strips my URL, swift?
我正在启动我的对象管理器:
let baseURL = NSURL(string:"http://xxxxx.net/api")
self.client = AFHTTPClient(baseURL: self.baseURL)
self.objectManager = RKObjectManager(HTTPClient: self.client)
但是当我 运行 我的代码:
objectManager.getObjectsAtPath("/json.product.gf.php", parameters: queryParameters,
success: {(requestOperation, mappingResult) -> Void in
var defaults = NSUserDefaults.standardUserDefaults()
var dateFormatter = NSDateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd"
let d = NSDate()
defaults.setValue(dateFormatter.stringFromDate(d), forKey: "lastProductUpdate")
},
failure: {(requestOperation, mappingResult) -> Void in
NSLog("Failed Products")
})
它出错了,因为它正在从我的基础 url 中剥离 "api"。
为什么?
RKObjectManager 内部可能使用 init?(string URLString: String, relativeToURL baseURL: NSURL?)
从基础 URL 和相对 url 创建新的 URL。
您的代码基本上有两个问题。
- 你的基础URL 不以
/
结尾。前面提到的 API 忽略了 baseURL 的最后一个 /
后面的所有内容。
- 你假定的亲戚 url 以
/
开头。这意味着它实际上是一个绝对 URL。这将忽略 baseURL 主机之后的所有内容
如果处理基数URL,斜杠的位置非常重要。这是一个简单的修复:
let baseURL = NSURL(string:"http://xxxxx.net/api/")
和
objectManager.getObjectsAtPath("json.product.gf.php", parameters: queryParameters,
如果你附近有游乐场想亲眼看看:
let baseURL = NSURL(string:"http://xxxxx.net/api")! // http://xxxxx.net/api
let url1 = NSURL(string: "json.php", relativeToURL: baseURL)! // http://xxxxx.net/json.php
let url2 = NSURL(string: "/json.php", relativeToURL: baseURL)! // http://xxxxx.net/json.php
let baseURL2 = NSURL(string:"http://xxxxx.net/api/")! // http://xxxxx.net/api/
let url3 = NSURL(string: "json.php", relativeToURL: baseURL2)! // http://xxxxx.net/api/json.php
let url4 = NSURL(string: "/json.php", relativeToURL: baseURL2)! // http://xxxxx.net/json.php
我正在启动我的对象管理器:
let baseURL = NSURL(string:"http://xxxxx.net/api")
self.client = AFHTTPClient(baseURL: self.baseURL)
self.objectManager = RKObjectManager(HTTPClient: self.client)
但是当我 运行 我的代码:
objectManager.getObjectsAtPath("/json.product.gf.php", parameters: queryParameters,
success: {(requestOperation, mappingResult) -> Void in
var defaults = NSUserDefaults.standardUserDefaults()
var dateFormatter = NSDateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd"
let d = NSDate()
defaults.setValue(dateFormatter.stringFromDate(d), forKey: "lastProductUpdate")
},
failure: {(requestOperation, mappingResult) -> Void in
NSLog("Failed Products")
})
它出错了,因为它正在从我的基础 url 中剥离 "api"。
为什么?
RKObjectManager 内部可能使用 init?(string URLString: String, relativeToURL baseURL: NSURL?)
从基础 URL 和相对 url 创建新的 URL。
您的代码基本上有两个问题。
- 你的基础URL 不以
/
结尾。前面提到的 API 忽略了 baseURL 的最后一个/
后面的所有内容。 - 你假定的亲戚 url 以
/
开头。这意味着它实际上是一个绝对 URL。这将忽略 baseURL 主机之后的所有内容
如果处理基数URL,斜杠的位置非常重要。这是一个简单的修复:
let baseURL = NSURL(string:"http://xxxxx.net/api/")
和
objectManager.getObjectsAtPath("json.product.gf.php", parameters: queryParameters,
如果你附近有游乐场想亲眼看看:
let baseURL = NSURL(string:"http://xxxxx.net/api")! // http://xxxxx.net/api
let url1 = NSURL(string: "json.php", relativeToURL: baseURL)! // http://xxxxx.net/json.php
let url2 = NSURL(string: "/json.php", relativeToURL: baseURL)! // http://xxxxx.net/json.php
let baseURL2 = NSURL(string:"http://xxxxx.net/api/")! // http://xxxxx.net/api/
let url3 = NSURL(string: "json.php", relativeToURL: baseURL2)! // http://xxxxx.net/api/json.php
let url4 = NSURL(string: "/json.php", relativeToURL: baseURL2)! // http://xxxxx.net/json.php