2016-06-14 3 views
0

スウィフトでGoogleスプレッドシートAPIを学習する際に、スプレッドシートに1つの範囲を書きたいと思っていました。GoogleスプレッドシートAPIを使用して基本的な書き込みを行うにはどうすればよいですか?

Quickstart iOS GuideBasic Writing examplesを見ると、私は、このコードに付属している:

func constructAndSendAQuery() { 
    let baseUrl = "https://sheets.googleapis.com/v4/spreadsheets" 
    let spreadsheetId = "1FhbBdEvpcyHzb3Akn1opmru0ire2fLVki5ZolMmZaRs" 
    let range = "Sales!A31:C31" 
    let url = baseUrl + "/" + spreadsheetId + "/values/" + range 
    let params = ["valueInputOption": "RAW"] 
    let fullUrl = GTLUtilities.URLWithString(url, queryParameters: params) 

    let body = GTLObject() 
    body.JSON = ["majorDimension":"ROWS", 
       "values": ["One", "Two", "Three"]] 

    service.fetchObjectByInsertingObject(body, 
             forURL: fullUrl, 
             delegate: self, 
             didFinishSelector: #selector(ViewController.processTheResponse(_:finishedWithObject:error:))) 
} 

は私が間違っていたが、私はエラーメッセージが表示されましたかわからない:「要求されたURLは、このサーバ上で見つかりませんでした」。

答えて

0

GTLService codeによると、fetchObjectByInsertUpdatingPOSTとなりますが、この要求にはPUTが必要です。 fetchObjectByUpdatingObjectPUTを実行する必要がありますので、その代わりに試してみてください。

+0

ええ、ありがとうサム!それは助けになった。 –

1

@ sam-berlinは、fetchObjectByInsertUpdatingの代わりにfetchObjectByUpdatingObjectを使用していたはずです。

しかし、もう少し間違いやタイプミスがありました。 JSONを構築する際に、角括弧を失って無効な値についてエラーが発生しました。

動作するコードは次のようになります。

func constructAndSendARequest() { 

    let baseUrl = "https://sheets.googleapis.com/v4/spreadsheets" 
    let spreadsheetId = "1FhbBdEvpcyHzb3Akn1opmru0ire2fLVki5ZolMmZaRs" 
    let range = "Sales!A3:D3" 
    let url = baseUrl + "/" + spreadsheetId + "/values/" + range 
    let params = ["valueInputOption": "RAW"] 
    let fullUrl = GTLUtilities.URLWithString(url, queryParameters: params) 


    let body = GTLObject() 
    body.JSON = ["range": range, 
       "majorDimension": "ROWS", 
       "values": [["One", "Two", "Three"]]] 

    service.fetchObjectByUpdatingObject(body, forURL: fullUrl, delegate: self, didFinishSelector: #selector(ViewController.processTheResponse(_:finishedWithObject:error:))) 
} 

それはservice.fetchObjectByUpdatingObject(body, forURL: fullUrl, completionHandler: nil)を使用することも可能だし、応答を処理しません。

関連する問題