Kentico Cloud Swift SDK不退回商品

时间:2019-06-28 09:02:15

标签: swift kentico kentico-cloud

我正在测试Kentico Cloud Swift SDK,以返回一些“文章”内容类型(我创建了其中两种,并已发布)。

我正在使用here:所述的样板代码

我得到的结果是:[Kentico Cloud] Getting items action has succeeded. Received nil items.

我的代码:

let client = DeliveryClient.init(projectId: <project id>, previewApiKey: <preview key>, secureApiKey: <secure key>, enableDebugLogging: true)

func getArticles(){

    // Note: Using "items" as custom query returns all content items,
    // but to map them to a single model, a filter is needed.
    let customQuery = "items?system.type=article"

    // More about strongly-typed models https://github.com/Kentico/cloud-sdk-swift#using-strongly-typed-models
    client.getItems(modelType: Article.self, customQuery: customQuery) { (isSuccess, itemsResponse, error) in
        if isSuccess {

    // We get here and itemsResponse != nil but items == nil

            if let articles = itemsResponse?.items {
                for article in articles {


                }
            }
        } else {
            if let error = error {
                print(error)
            }
        }
    }
}

我相信会在触发ObjectMapper并将JSON转换为Article对象之前出现此错误消息。我可能是错的。

有人有什么想法吗?

更新 有趣的是,如果我这样请求单个文章对象...

client.getItem(modelType: Article.self, itemName: <codename>) { (isSuccess, itemResponse, error) in
            if isSuccess {

                if let article = itemResponse?.item {
                    // Use your item here
                }
            } else {
                if let error = error {
                    print(error)
                }
            }
        }

...然后它起作用。我得到了Article对象。只是要求所有失败的文章。

2 个答案:

答案 0 :(得分:3)

我将在今天晚些时候对此问题进行调查,但是,根据您的描述,这可能是由于Delivery API项准备就绪延迟所致-该项目尚未完全与Delivery API同步。发布/取消发布项目或创建/生成项目后,Delivery API在处理消息方面可能会出现少量延迟,这可能导致项目不可用。此延迟可能会有所不同-根据我的经验,可能会从几秒钟到2-3分钟不等。不过,为了确定我将对其进行检查。我会及时通知您。

编辑:我很确定在您请求项目时,项目未在Delivery API上进行同步和处理。 API返回了 200 ,这导致回调中的 isSuccess true ,但是,可能没有或只有一部分可用-我已重现了此行为(以下屏幕截图),尽管它是设计使然(事件中心中的内容/消息必须异步处理)。

我还建议对Kentico Cloud文档进行改进,以提及/解释由processing events queue messages from Event Hubs引起的可能的延迟。

debug items property

请确定-您可以使用getArticles自定义查询再次尝试吗?

Edit2:回到关于ObjectMapper的问题。这不仅是调试消息,不是错误,但是,调试消息中应该不应该是nil,而应该是0(零)。此消息来自:

    private func sendGetItemsRequest<T>(url: String, completionHandler: @escaping (Bool, ItemsResponse<T>?, Error?) -> ()) where T: Mappable {
    sessionManager.request(url, headers: self.headers).responseObject { (response: DataResponse<ItemsResponse<T>>) in

        switch response.result {
        case .success:
            if let value = response.result.value {
                let deliveryItems = value
                if self.isDebugLoggingEnabled {
                    print("[Kentico Cloud] Getting items action has succeeded. Received \(String(describing: deliveryItems.items?.count)) items.")
                }
                completionHandler(true, deliveryItems, nil)
            }
        case .failure(let error):
            if self.isDebugLoggingEnabled {
                print("[Kentico Cloud] Getting items action has failed. Check requested URL: \(url)")
            }
            completionHandler(false, nil, error)
        }
    }
}

答案 1 :(得分:1)

好的。这很奇怪。在通过请求一个单独的项目(请参阅上面的帖子中的更新)并获得结果(赞)检查API之后。现在看来原始代码(不变)现在可以使用了。

我想知道数据是否需要花费一些时间才能传播并在API中可用?

谁知道。很奇怪。