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

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

ただいまの
回答率

87.79%

swiftでのメモ内容の保存

受付中

回答 3

投稿

  • 評価
  • クリップ 0
  • VIEW 3,012

score 12

現在メモアプリのようなものを作成しているのですが、textviewに記述したものを保存し、次にセルをタップしてもその内容が保存されているようにしたいのですがそのコードの書き方がわかりません。現在は

import UIKit

class ViewController: SecondViewController1, UITableViewDelegate, UITableViewDataSource  {

    @IBOutlet weak var myTableView: UITableView!
    
    let myItems: NSMutableArray = ["TEST1", "TEST2", "TEST3"]
    
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        
        self.navigationItem.rightBarButtonItem = self.editButtonItem()
        myTableView.allowsSelectionDuringEditing = true
        
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    /*
    Cellの総数を返す
    (実装必須)
    */
    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return myItems.count
    }
    
    /*
    Cellに値を設定する
    (実装必須)
    */
    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        
        let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as! UITableViewCell
        
        // Cellに値を設定.
        cell.textLabel?.text = "\(myItems[indexPath.row])"
        
        return cell
    }
    
    /*
    編集ボタンが押された際に呼び出される
    */
    override func setEditing(editing: Bool, animated: Bool) {
        super.setEditing(editing, animated: animated)
        
        // TableViewを編集可能にする
        myTableView.setEditing(editing, animated: true)
        
        // 編集中のときのみaddButtonをナビゲーションバーの左に表示する
        if editing {
            println("編集中")
            let addButton = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.Add, target: self, action: "addCell:")
            self.navigationItem.setLeftBarButtonItem(addButton, animated: true)
        } else {
            println("通常モード")
            self.navigationItem.setLeftBarButtonItem(nil, animated: true)
        }
    }
    
    /*
    addButtonが押された際呼び出される
    */
    func addCell(sender: AnyObject) {
        println("追加")
        
        // myItemsに追加.
        myItems.addObject("add Cell")
        
        // TableViewを再読み込み.
        myTableView.reloadData()
    }
    
    /*
    Cellを挿入または削除しようとした際に呼び出される
    */
    func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) {
        
        // 削除のとき.
        if editingStyle == UITableViewCellEditingStyle.Delete {
            println("削除")
            
            // 指定されたセルのオブジェクトをmyItemsから削除する.
            myItems.removeObjectAtIndex(indexPath.row)
            
            // TableViewを再読み込み.
            myTableView.reloadData()
        }
    }
    
    /*
    Cellが選択された際に呼び出される.
    */
    func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
        
        // 選択中のセルが何番目か.
        println("Num: \(indexPath.row)")
        
        // 選択中のセルのvalue.
        println("Value: \(myItems[indexPath.row])")
        
        // 選択中のセルを編集できるか.
        println("Edeintg: \(tableView.editing)")
        
        //SecondViewController1のインスタンスを作成する.
        let vc: SecondViewController1 = UIStoryboard(name: "Main", bundle: nil).instantiateViewControllerWithIdentifier("second") as! SecondViewController1
        
         vc.memo = "\(myItems[indexPath.row])"
        
        // Viewの移動する.
        self.navigationController?.pushViewController(vc, animated: true)
        
    }


    
}

import Foundation

import UIKit

class SecondViewController1: UIViewController,UITextViewDelegate{
    
    @IBOutlet weak var detailDescriptionLabel: UILabel!
    
    @IBOutlet weak var myTextView: UITextView!
    
    var loadText : String!
    
    var memo: AnyObject? {
        didSet {
            // Update the view.
            self.configureView()
            
        }
    }
    
    func configureView() {
        // Update the user interface for the detail item.
        if let detail: AnyObject = self.memo {
            if let label = self.detailDescriptionLabel {
                label.text = detail.description
            }
        }
    }
    
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        self.configureView()
        
        let userDefaults = NSUserDefaults.standardUserDefaults()
        
        if loadText != nil {
        // キーが"saveText"のStringをとります。
        loadText = userDefaults.stringForKey("saveText")
        
        // labelに表示
        myTextView.text = loadText
        }
        
    }
    
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }
    
    @IBAction func tapScreen(sender: AnyObject) {
    
        self.view.endEditing(true)
        
    }
    
    func textViewDidChange(textView: UITextView){
        // NSUserDefaultsインスタンスの生成
        let userDefaults = NSUserDefaults.standardUserDefaults()
        
        // キー: "saveText" , 値: "<textFieldの入力値>" を格納。(idは任意)
        userDefaults.setObject(textView.text, forKey: "saveText")

    }
    
}

このような感じで記述しています。まだ開発初めて間もないためネットにあるデータ保存に関するコードをとりあえず書いてるだけのような感じなので当然機能してくれません。自分でも調べながら勉強中ですが皆様のお力もお借りできたらと思います。
  • 気になる質問をクリップする

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

回答 3

0

データを保存する方法として CoreData という仕組みがあります。

参考ページ:
  • iPhoneアプリ開発初心者がSwift + CoreDataでシンプルなTODOアプリをつくってみた
http://dangerous-animal141.hatenablog.com/entry/2015/03/01/141138

他のも google で "swift table coredata" で検索すると、情報がいろいろ得られます。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2015/05/22 22:25

    回答ありがとうございます。
    CoreDataですか。勉強してみます。
    ただ今回はNSUserDefaultsで実装していく方針でして、save,reroadボタンを実装すればメモ内容を復元するところまではできているのですが、ボタンで実装するのではなく、文字を入力する毎にテキストデータを保存しそれをreroadしなくても常に表示したいのです。
    アドバイスをいただいて申し訳ないのですが私の方針に沿う方法はありますでしょうか。

    並行してCoreDataも調べてみます。

    キャンセル

  • 2015/05/22 22:28

    あと洗濯したセル毎でデータを分けることもまだ出来ていません。こちらについてもご教授願いたいです。

    キャンセル

  • 2015/05/22 23:21

    ちなみにただ単にテキストの保存とロードだけなら以下のコードで実装できるのですが、セル毎に保存するデータは分けられていないし、ページ遷移時に表示ではなくわざわざロードボタンを押さなきゃいけないしなど課題が山積みな状態です。

    import Foundation

    import UIKit

    class SecondViewController1: UIViewController,UITextViewDelegate{

    @IBOutlet weak var detailDescriptionLabel: UILabel!

    @IBOutlet weak var myTextView: UITextView!

    var memo: AnyObject? {
    didSet {
    // Update the view.
    self.configureView()

    }
    }

    @IBAction func reroad(sender: AnyObject) {

    // データ読み込み処理

    // NSUserDefaultsインスタンスの生成
    let userDefaults = NSUserDefaults.standardUserDefaults()

    // キーが"saveText"のStringをとります。
    var loadText : String! = userDefaults.stringForKey("saveText")

    // labelに表示
    myTextView.text = loadText

    }
    @IBAction func save(sender: AnyObject) {

    // データ保存処理

    // NSUserDefaultsインスタンスの生成
    let userDefaults = NSUserDefaults.standardUserDefaults()

    // キー: "saveText" , 値: "<textFieldの入力値>" を格納。(idは任意)
    userDefaults.setObject(myTextView.text, forKey: "saveText")

    }

    func configureView() {
    // Update the user interface for the detail item.
    if let detail: AnyObject = self.memo {
    if let label = self.detailDescriptionLabel {
    label.text = detail.description
    }
    }
    }


    override func viewDidLoad() {
    super.viewDidLoad()

    self.configureView()

    let userDefaults = NSUserDefaults.standardUserDefaults()

    }

    override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    }

    @IBAction func tapScreen(sender: AnyObject) {

    self.view.endEditing(true)

    }

    }

    キャンセル

  • 2015/05/25 20:48

    自分で試行錯誤してみて、なんとかセルの遷移時に前回のメモをそのまま表示するのとsaveを押さなくて何もしなくてもメモ内容を保存できるようにはなりました。しかし未だに選択したセル毎によりメモ内容を変えることができません。どうか助言お願いします。
    ちなみに現在のコードは以下のものです。

    ーーメインテーブル

    import UIKit

    class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {

    @IBOutlet weak var myTableView: UITableView!

    let myItems: NSMutableArray = ["TEST1", "TEST2", "TEST3"]

    override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.

    //ナビゲーションバーに編集ボタンを追加.
    self.navigationItem.rightBarButtonItem = self.editButtonItem()

    //編集状態での選択を許可.
    myTableView.allowsSelectionDuringEditing = true

    }

    override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
    }

    /*
    Cellの総数を返す
    (実装必須)
    */
    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return myItems.count
    }

    /*
    Cellに値を設定する
    (実装必須)
    */
    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

    let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as! UITableViewCell

    // Cellに値を設定.
    cell.textLabel?.text = "\(myItems[indexPath.row])"

    return cell
    }

    /*
    編集ボタンが押された際に呼び出される
    */
    override func setEditing(editing: Bool, animated: Bool) {
    super.setEditing(editing, animated: animated)

    // TableViewを編集可能にする
    myTableView.setEditing(editing, animated: true)

    // 編集中のときのみaddButtonをナビゲーションバーの左に表示する
    if editing {
    println("編集中")
    let addButton = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.Add, target: self, action: "addCell:")
    self.navigationItem.setLeftBarButtonItem(addButton, animated: true)
    } else {
    println("通常モード")
    self.navigationItem.setLeftBarButtonItem(nil, animated: true)
    }
    }

    /*
    addButtonが押された際呼び出される
    */
    func addCell(sender: AnyObject) {
    println("追加")

    // myItemsに追加.
    myItems.addObject("add Cell")

    // TableViewを再読み込み.
    myTableView.reloadData()
    }

    /*
    Cellを挿入または削除しようとした際に呼び出される
    */
    func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) {

    // 削除のとき.
    if editingStyle == UITableViewCellEditingStyle.Delete {
    println("削除")

    // 指定されたセルのオブジェクトをmyItemsから削除する.
    myItems.removeObjectAtIndex(indexPath.row)

    // TableViewを再読み込み.
    myTableView.reloadData()
    }
    }

    /*
    Cellが選択された際に呼び出される.
    */
    func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {

    // 選択中のセルが何番目か.
    println("Num: \(indexPath.row)")

    // 選択中のセルのvalue.
    println("Value: \(myItems[indexPath.row])")

    // 選択中のセルを編集できるか.
    println("Edeintg: \(tableView.editing)")

    //SecondViewController1のインスタンスを作成する.
    let vc: SecondViewController1 = UIStoryboard(name: "Main", bundle: nil).instantiateViewControllerWithIdentifier("second") as! SecondViewController1

    //遷移先に選択したセルの名前を渡す.
    vc.memo = "\(myItems[indexPath.row])"

    // Viewの移動する.
    self.navigationController?.pushViewController(vc, animated: true)

    }



    }

    ーー

    ーーメモ内容を表示させる画面

    import Foundation

    import UIKit

    class SecondViewController1: UIViewController,UITextViewDelegate{

    @IBOutlet weak var detailDescriptionLabel: UILabel!

    @IBOutlet weak var myTextView: UITextView!

    var memo: AnyObject? {
    didSet {
    // Update the view.
    self.configureView()

    }
    }

    var cellnumber:AnyObject?

    //ページ遷移時に最初に行う処理
    func configureView() {
    // Update the user interface for the detail item.
    if let detail: AnyObject = self.memo {
    if let label = self.detailDescriptionLabel {
    label.text = detail.description

    /*
              メモデータ復元
    */

    // NSUserDefaultsインスタンスの生成
    let userDefaults = NSUserDefaults.standardUserDefaults()

    // キーが"saveText"のStringをとります。
    var loadText : String! = userDefaults.stringForKey("saveText")

    // labelに表示
    myTextView.text = loadText

    }
    }
    }


    override func viewDidLoad() {
    super.viewDidLoad()

    //ページ遷移時に最初に行う処理
    self.configureView()

    }

    override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    }

    //tapした時に編集状態解除
    @IBAction func tapScreen(sender: AnyObject) {

    self.view.endEditing(true)

    }

    func textViewDidChange(textView: UITextView){

    // データ保存処理

    // NSUserDefaultsインスタンスの生成
    let userDefaults = NSUserDefaults.standardUserDefaults()

    // キー: "saveText" , 値: "<textFieldの入力値>" を格納。(idは任意)
    userDefaults.setObject(myTextView.text, forKey: "saveText")

    }
    }

    ーー

    キャンセル

0

遷移先にviewWillAppearを追加してそこに処理をかけば良さそうな気がします。

override func viewWillAppear() {
 //データを読み込んで表示する処理
}

iosでは画面が読み込まれる前、後、アニメーション描写が始める前、後、遷移する直前、直後などのイベントがあります。

viewWillAppearは画面遷移して、画面が表示される前に読み込まれるものです。

イベント駆動について
http://d.hatena.ne.jp/glass-_-onion/20120405/1333611664

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

0

補足をみて。

ちゃんと読んでないんでわかりませんけど、保存するメモを配列で保存して、遷移先で配列のindexPath.row番目の値を取り出せば良さそうじゃないですか?

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2015/05/26 19:18

    回答ありがとうございます。

    その方法だとセルを削除した時にその時点でのindexPath.row-1に全てのメモを移すコードが必要になりますかね。

    キャンセル

  • 2015/05/26 19:41

    いや、メモ内容を保存している配列からremoveObjectAtindexすればいいんですかね。

    キャンセル

  • 2015/05/30 21:24

    なんとか自力でメモ内容をそれぞれ表示させることはできるようになったのですが、メモ内容を表示させるクラスのインスタンスを作成してからの配列削除、追加が出来ないのです。以下コードと具体的に困っているところを書きます。

    メインのクラス

    import UIKit

    class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {

    @IBOutlet weak var myTableView: UITableView!

    let myItems: NSMutableArray = ["TEST1", "TEST2", "TEST3"]

    override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.

    //ナビゲーションバーに編集ボタンを追加.
    self.navigationItem.rightBarButtonItem = self.editButtonItem()

    //編集状態での選択を許可.
    myTableView.allowsSelectionDuringEditing = true

    }

    override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
    }

    /*
    Cellの総数を返す
    (実装必須)
    */
    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return myItems.count
    }

    /*
    Cellに値を設定する
    (実装必須)
    */
    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

    let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as! UITableViewCell

    // Cellに値を設定.
    cell.textLabel?.text = "\(myItems[indexPath.row])"

    return cell
    }

    /*
    編集ボタンが押された際に呼び出される
    */
    override func setEditing(editing: Bool, animated: Bool) {
    super.setEditing(editing, animated: animated)

    // TableViewを編集可能にする
    myTableView.setEditing(editing, animated: true)

    // 編集中のときのみaddButtonをナビゲーションバーの左に表示する
    if editing {
    println("編集中")
    let addButton = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.Add, target: self, action: "addCell:")
    self.navigationItem.setLeftBarButtonItem(addButton, animated: true)
    } else {
    println("通常モード")
    self.navigationItem.setLeftBarButtonItem(nil, animated: true)
    }
    }

    /*
    addButtonが押された際呼び出される
    */
    func addCell(sender: AnyObject) {

    println("追加")

    // myItemsに追加.
    myItems.addObject("add Cell")

    let vc: SecondViewController1 = UIStoryboard(name: "Main", bundle: nil).instantiateViewControllerWithIdentifier("second") as! SecondViewController1

    vc.savedata.addObject("add Cell")

    // TableViewを再読み込み.
    myTableView.reloadData()

    }

    /*
    Cellを挿入または削除しようとした際に呼び出される
    */
    func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) {

    // 削除のとき.
    if editingStyle == UITableViewCellEditingStyle.Delete {
    println("削除")

    // 指定されたセルのオブジェクトをmyItemsから削除する.
    myItems.removeObjectAtIndex(indexPath.row)


    let vc: SecondViewController1 = UIStoryboard(name: "Main", bundle: nil).instantiateViewControllerWithIdentifier("second") as! SecondViewController1

    println("\(vc.savedata[1])")

    vc.savedata.removeObjectAtIndex(indexPath.row)

    println("\(vc.savedata[1])")

    // TableViewを再読み込み.
    myTableView.reloadData()

    }

    }

    /*
    Cellが選択された際に呼び出される.
    */
    func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {

    // 選択中のセルが何番目か.
    println("Num: \(indexPath.row)")

    // 選択中のセルのvalue.
    println("Value: \(myItems[indexPath.row])")

    // 選択中のセルを編集できるか.
    println("Edeintg: \(tableView.editing)")

    //SecondViewController1のインスタンスを作成する.
    let vc: SecondViewController1 = UIStoryboard(name: "Main", bundle: nil).instantiateViewControllerWithIdentifier("second") as! SecondViewController1

    //遷移先に選択したセルの名前を渡す.
    vc.memo = "\(myItems[indexPath.row])"

    vc.cellnumber = indexPath.row

    // Viewの移動する.
    self.navigationController?.pushViewController(vc, animated: true)

    }



    }



    メモ内容を表示させるクラス

    import Foundation

    import UIKit

    class SecondViewController1: UIViewController,UITextViewDelegate{

    @IBOutlet weak var detailDescriptionLabel: UILabel!

    @IBOutlet weak var myTextView: UITextView!

    var memo: AnyObject? {
    didSet {
    // Update the view.
    self.configureView()

    }
    }

    var cellnumber: Int?

    let savedata: NSMutableArray = ["TEST1", "TEST2", "TEST3"]

    //ページ遷移時に最初に行う処理
    func configureView() {
    // Update the user interface for the detail item.
    if let detail: AnyObject = self.memo {
    if let label = self.detailDescriptionLabel {
    label.text = detail.description

    /*
              メモデータ復元
    */

    // NSUserDefaultsインスタンスの生成
    let userDefaults = NSUserDefaults.standardUserDefaults()

    savedata[cellnumber!] = String(cellnumber!)

    // キーが"saveText"のStringをとります。
    var loadText : String! = userDefaults.stringForKey(savedata[cellnumber!] as! String)

    // labelに表示
    myTextView.text = loadText



    }
    }
    }


    override func viewDidLoad() {
    super.viewDidLoad()

    //ページ遷移時に最初に行う処理
    self.configureView()

    }

    override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    }

    //tapした時に編集状態解除
    @IBAction func tapScreen(sender: AnyObject) {

    self.view.endEditing(true)

    }

    func textViewDidChange(textView: UITextView){

    // データ保存処理

    // NSUserDefaultsインスタンスの生成
    let userDefaults = NSUserDefaults.standardUserDefaults()

    // キー: "saveText" , 値: "<textFieldの入力値>" を格納。(idは任意)
    userDefaults.setObject(myTextView.text, forKey: savedata[cellnumber!] as! String)

    }
    }


    これの
    import Foundation

    import UIKit

    class SecondViewController1: UIViewController,UITextViewDelegate{

    @IBOutlet weak var detailDescriptionLabel: UILabel!

    @IBOutlet weak var myTextView: UITextView!

    var memo: AnyObject? {
    didSet {
    // Update the view.
    self.configureView()

    }
    }

    var cellnumber: Int?

    let savedata: NSMutableArray = ["TEST1", "TEST2", "TEST3"]

    //ページ遷移時に最初に行う処理
    func configureView() {
    // Update the user interface for the detail item.
    if let detail: AnyObject = self.memo {
    if let label = self.detailDescriptionLabel {
    label.text = detail.description

    /*
              メモデータ復元
    */

    // NSUserDefaultsインスタンスの生成
    let userDefaults = NSUserDefaults.standardUserDefaults()

    savedata[cellnumber!] = String(cellnumber!)

    // キーが"saveText"のStringをとります。
    var loadText : String! = userDefaults.stringForKey(savedata[cellnumber!] as! String)

    // labelに表示
    myTextView.text = loadText



    }
    }
    }


    override func viewDidLoad() {
    super.viewDidLoad()

    //ページ遷移時に最初に行う処理
    self.configureView()

    }

    override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    }

    //tapした時に編集状態解除
    @IBAction func tapScreen(sender: AnyObject) {

    self.view.endEditing(true)

    }

    func textViewDidChange(textView: UITextView){

    // データ保存処理

    // NSUserDefaultsインスタンスの生成
    let userDefaults = NSUserDefaults.standardUserDefaults()

    // キー: "saveText" , 値: "<textFieldの入力値>" を格納。(idは任意)
    userDefaults.setObject(myTextView.text, forKey: savedata[cellnumber!] as! String)

    }
    }


    この部分で、メモ内容を保存している配列savedataから要素を削除する前後で配列の要素をprintしているのですが、常にTEST2 (removeObjectAtindexして)(テスト2、テスト3は最初から入っている要素)TEST3となってしまいます。何度削除してもこうなってしまうのです。つまりどうやら一度はTEST2が削除されているがまたすぐに生成されている?みたいなのですが。どうなっているのかわかりますでしょうか。

    キャンセル

  • 2015/05/30 21:25

    すいません。この部分毎違えました。
    この部分とは

    let vc: SecondViewController1 = UIStoryboard(name: "Main", bundle: nil).instantiateViewControllerWithIdentifier("second") as! SecondViewController1

    println("\(vc.savedata[1])")

    vc.savedata.removeObjectAtIndex(indexPath.row)

    println("\(vc.savedata[1])")

    // TableViewを再読み込み.
    myTableView.reloadData()

    このぶぶんのことです。

    キャンセル

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

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

関連した質問

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