Swiftを用いてAppSyncを使用した学習をしています。
appsyncの公式サイトを真似てデータをmutation,queryするところまではできたのですが、途中でqueryがうまく動作しなくなりました。
テーブルにデータが何も存在しないはずなのに、idを指定してgettodoすると一度mutationしたことあるデータ(現在は削除しているはず)が取得できてしまいます。
何か解放しなくてはいけないものがあるのでしょうか。
デバイス別にシミュレーションしてみるとそのデバイスでのmutationしかqueryできなかったのですが、、、
appSyncClientをAWSCognitoUserPoolsAuthProviderAsyncで生成しているため、これが原因でappsyncClientのmutationしかqueryできないのでしょうか?
下記のコードの内容は、サインインが成功した場合、idが"NUM"のデータをquery。
取得結果がnilの場合は"NIL",
取得データが存在する場合は中身を表示というものになっています。
swift
1let databaseURL = URL(fileURLWithPath:NSTemporaryDirectory()).appendingPathComponent("database_name") 2 do { 3 // Initialize the AWS AppSync configuration 4 let appSyncServiceConfig = try AWSAppSyncServiceConfig() 5 6 let appSyncConfig = try AWSAppSyncClientConfiguration(appSyncServiceConfig: appSyncServiceConfig, 7 userPoolsAuthProvider: { 8 class MyCognitoUserPoolsAuthProvider : AWSCognitoUserPoolsAuthProviderAsync { 9 func getLatestAuthToken(_ callback: @escaping (String?, Error?) -> Void) { 10 AWSMobileClient.sharedInstance().getTokens { (tokens, error) in 11 if error != nil { 12 callback(nil, error) 13 } else { 14 callback(tokens?.idToken?.tokenString, nil) 15 } 16 } 17 } 18 } 19 return MyCognitoUserPoolsAuthProvider()}(), 20 databaseURL:databaseURL) 21 22 // Initialize the AWS AppSync client 23 appSyncClient = try AWSAppSyncClient(appSyncConfig: appSyncConfig) 24 } catch { 25 print("Error initializing appsync client. (error)") 26 }
swift
1var appSyncClient: AWSAppSyncClient? 2let appDelegate = UIApplication.shared.delegate as! AppDelegate 3 4var approval_NUM:Int! 5override func viewDidLoad() { 6 super.viewDidLoad() 7 8 appSyncClient = appDelegate.appSyncClient 9 10 AWSMobileClient.sharedInstance().initialize { (userState, error) in 11 if let userState = userState { 12 switch(userState){ 13 case .signedIn: 14 DispatchQueue.main.async { 15 print("Sign In") 16 } 17 self.appSyncClient?.fetch(query: GetTodoQuery(id:"NUM")) {(result, error) in 18 if error != nil { 19 print(error?.localizedDescription ?? "") 20 } 21 22 if (result?.data?.getTodo?.id) != nil { 23 print("A") 24 print(result?.data?.getTodo?.snapshot) 25 }else{ 26 print("NIL") 27 } 28 } 29 30 31 case .signedOut: 32 AWSMobileClient.sharedInstance().showSignIn(navigationController: self.navigationController!, { (userState, error) in 33 if(error == nil){ //Successful signin 34 DispatchQueue.main.async { 35 print("Sign Out") 36 } 37 } 38 }) 39 default: 40 AWSMobileClient.sharedInstance().signOut() 41 } 42 } else if let error = error { 43 print(error.localizedDescription) 44 } 45 } 46 47 }
このプログラムを実行した際の結果は下記の通りです。
Sign In
A
Optional(["name": Optional("Use AppSync"), "__typename": Optional("Todo"), "description": Optional("0"), "id": Optional("NUM")])
なぜ値が取得できてしまうのでしょうか。
アドバイスいただけると幸いです。
あなたの回答
tips
プレビュー