0

我正在使用 AWS AppSync 通过 Swift 开发 iOS 应用程序。所以我将数据记录到 AWS DynamoDB。
我可以使用 GraphQL 操作「Create~~Mutation」「Update~~Mutation」「Delete~~Mutation」来确认数据的创建、更新、删除。准确地说,从 DynamoDB 控制台中删除的数据消失了,我可以检查一下。好吧,问题是当我查询数据更新时,我只能在更新前查询数据。

// schema.GraphQL
type Todo @model {
  id: ID!
  name: String!
  description: String
}


@IBOutlet weak var idText: UITextField!
@IBOutlet weak var nameText: UITextField!
@IBOutlet weak var desText: UITextField!

 @IBAction func Update(_ sender: Any) {

        let up = UpdateTodoInput.init(id: idText.text!, name: nameText.text!, description: desText.text)

        appSyncClient?.perform(mutation: UpdateTodoMutation(input: up)) { (result, error) in
            if let error = error as? AWSAppSyncClientError {
                print("Error occurred: \(error.localizedDescription )")
            }
            if let resultError = result?.errors {
                print("Error saving the item on server: \(resultError)")
                return
            }
            print(result?.data?.updateTodo)
        }

    }


 @IBAction func Get(_ sender: Any) {

        let get = GetTodoQuery.init(id: idText.text!)

        appSyncClient?.fetch(query: get)  { (result, error) in
            if error != nil {
                print(error?.localizedDescription ?? "")
                return
            }
            print(result?.data?.getTodo)
            self.did = result?.data?.getTodo
            print(self.did)


            DispatchQueue.main.async {
                self.nameText.text! = result?.data?.getTodo?.name as! String
                self.desText.text! = result?.data?.getTodo?.description as! String
            }

        }


    }

〜序言〜</p>

我想更新的属性可以通过输入值来更新「idText」「nameText」「desText」</p>

当我运行时Get(_ sender: Any),我可以使用表唯一 ID 从 DynamoDB 获取数据。

并且成功获取数据,「nameText」「desText」,两个UITextFiled.text属性都发生了变化。

获取数据的name,description设置为nameText.text, desText.text

〜序言〜</p>

当我运行Update(_ sender: Any)到现有数据时。

我可以通过 DynamoDB 控制台确认更新的数据,然后运行Get(_ sender: Any)

数据,即获取更新数据!但我只能得到未更新的数据!

例如,创建这个数据↓</p>

CreateTodoInput.init(id: "123", name: "daigo", description: "ichikawa")

我要更新 Created data this byUpdate(_ sender: Any)

idText.text = "123"
nameText.text = "Jack"
desText.text = "Sparo"

UpdateTodoInput.init(id: idText.text!, name: nameText.text!, description: desText.text)

然后我将获取更新的数据Get(_ sender: Any)

idText.text = "123"

GetTodoQuery.init(id: idText.text!)

我只能得到这个

(id: "123", name: "daigo", description: "ichikawa")

但我检查了 AWS DynamoDB 控制台,表示已更新数据。为什么会这样?

4

1 回答 1

0

我知道了 !

你不应该忘记这个论点!

cachePolicy: .returnCacheDataAndFetch

您可以按照此代码获取更新的数据!

appSyncClient?.fetch(query: post, cachePolicy: .returnCacheDataAndFetch)  { (result, error) in
if error != nil {
print(error?.localizedDescription ?? "")
return
}
}

谢谢你!

于 2020-04-22T11:31:12.960 回答