为什么 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