質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.48%

  • Swift

    7488questions

    Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

  • Swift 2

    1334questions

    Swift 2は、Apple社が独自に開発を行っている言語「Swift」のアップグレード版です。iOSやOS X、さらにLinuxにも対応可能です。また、throws-catchベースのエラーハンドリングが追加されています。

作成したCSVデータの内容を変更するには

受付中

回答 2

投稿

  • 評価
  • クリップ 1
  • VIEW 743

shiratak

score 8

お世話になります。プログラミング初心者ですがよろしくお願いします。

現在swiftを使ってアプリを作っています。
アプリの内容は
1.firstViewでTextFieldに入力した値を空の配列に保存する
2.SecondViewで保存されたデータを読み出しTableViewでリスト表示させる
3.SecondViewにあるボタンを押すとメールが起動し、保存された内容がCSVに変換され添付される
というものです。保存にはNSUserDefaultsを使っています。
動作的には問題ないのですが、2でセルに変更があった場合にその内容が正しくCSVに反映されず、困っています。

最初に1の画面で[123,456,789]と保存をし、メールを送信。
2でリスト表示された中から[456]のデータを削除する。もう一度メール送信。
すると、3で送信されるCSVに[123,456,789][123,789]というデータが残ってしまう、という状態です。

途中まで同じ動作をしたとして、
3で送信されるCSVには[123,789]のデータだけが残っている。
という状態になると理想的です。

とりあえずの形ですが、今はこのように記述してあります。

func onClickMailButton() {
        if MFMailComposeViewController.canSendMail() == false {
            print("Email Send Failed")
            return
        }
        csvData += ([item]) //itemはNSUserDefaultsから読み出したデータ
        sendMailWithCSV("メール件名", message: "メール本文", csv: csvData)
    }

いらないデータまでCSVに入ってしまうのは、メール起動ボタンを押す度itemがcsvDataに追加されてしまうからということには気付きました。

メール起動ボタンを押した際に常に新しいデータを添付するにはどうしたらいいのでしょうか?
①「csvDataが空であるか」を確認し、空でない場合は一旦中身を削除してからitemを添付する
②csvDataの内容をitemで上書きし、添付する
のどちらかができると上手くいく気がするのですが、CSVに関するネットの記事は読み出しについての話が多く、上手く探すことができませんでした。
メール起動時に毎回データの内容をチェックして更新するというのは難しいことなのでしょうか?

伝わりにくい文章になってしまい大変恐縮ですが、どうかお知恵をお貸しください。
よろしくお願いします。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

0

「②csvDataの内容をitemで上書きし、添付する」でいいと思います。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

上書きの方法が上手く調べられなかったので、①の方法をとることにしました。

if MFMailComposeViewController.canSendMail() == false {
            print("Email Send Failed")
            return
        }

        let check = csvData.isEmpty //false

        if check {
            csvData += ([item])
            sendMailWithCSV("メール件名", message: "メール本文", csv: csvData)
        }
        else {
            csvData.removeAll()
            print("\(csvData)")
            csvData += ([item])
            print("\(csvData)")
            sendMailWithCSV("メール件名", message: "メール本文", csv: csvData)

        }
    }


で、一応動作しました。また何かあった時は宜しくお願いします。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/04/01 18:05

    csvData = ([item])
    で上書き出来ませんか?

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.48%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • Swift

    7488questions

    Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

  • Swift 2

    1334questions

    Swift 2は、Apple社が独自に開発を行っている言語「Swift」のアップグレード版です。iOSやOS X、さらにLinuxにも対応可能です。また、throws-catchベースのエラーハンドリングが追加されています。