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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Swift

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

Swift 2

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

Q&A

2回答

2601閲覧

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

退会済みユーザー

退会済みユーザー

総合スコア0

Swift

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

Swift 2

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

0グッド

1クリップ

投稿2016/03/24 09:01

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

現在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に関するネットの記事は読み出しについての話が多く、上手く探すことができませんでした。
メール起動時に毎回データの内容をチェックして更新するというのは難しいことなのでしょうか?

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

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

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

func

1 if MFMailComposeViewController.canSendMail() == false { 2 print("Email Send Failed") 3 return 4 } 5 6 let check = csvData.isEmpty //false 7 8 if check { 9 csvData += ([item]) 10 sendMailWithCSV("メール件名", message: "メール本文", csv: csvData) 11 } 12 else { 13 csvData.removeAll() 14 print("\(csvData)") 15 csvData += ([item]) 16 print("\(csvData)") 17 sendMailWithCSV("メール件名", message: "メール本文", csv: csvData) 18 19 } 20 }

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

投稿2016/04/01 08:15

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

fuzzball

2016/04/01 09:05

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

0

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

投稿2016/03/24 13:07

Stripe

総合スコア2183

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問