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

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

ただいまの
回答率

90.12%

RealmSwiftでの質問です。

受付中

回答 0

投稿

  • 評価
  • クリップ 0
  • VIEW 747

rubbercorn

score 6

前提・実現したいこと

ここに質問したいことを詳細に書いてください
RealmSwiftを使って、野球関係のデータベースを作っています。
ViewController(前項)でチーム名と選手名を登録して、ViewController3(後項)で参照・修正(更新)するコードを書きたいと思っています。
ネット等でアドバイスを貰いながら、下記コードまではできたのですが、ViewController3(後項)でUITextFieldをタップしてもRealmSwiftの中身を表示することができないでいます。

該当のソースコード

以下VeiwController(前項)

import UIKit
import RealmSwift

class ViewController: UIViewController, UITextFieldDelegate {

    @IBOutlet weak var textField: UITextField!
    @IBOutlet weak var textField2: UITextField!
    @IBOutlet weak var teamLabel: UILabel!
    @IBOutlet weak var nameLabel: UILabel!
    
    var team:String!
    var name:String!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        }

    @IBAction func textFieldDidEndOnExit(sender: UITextField) {

        textField.delegate = self
        textField2.delegate = self
        
        let realm = try! Realm()
        let user = User()
        
        team = textField.text
        teamLabel.text = team
        name = textField2.text
        nameLabel.text = name
        
        user.team = team
        user.name = name
        
        try! realm.write {
            realm.add(user)
        }
    }
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }
    //キーボードを閉じる
    func textFieldShouldReturn(textField: UITextField) -> Bool {
        textField.resignFirstResponder()
        return true
    }
}

以下ViewController3(後項)

import UIKit
import RealmSwift

class ViewController3: UIViewController,UIPickerViewDelegate,UIToolbarDelegate, UITextFieldDelegate{
    
    @IBOutlet weak var textField: UITextField!
    @IBOutlet weak var textField2: UITextField!
    @IBOutlet weak var teamLabel: UILabel!
    @IBOutlet weak var nameLabel: UILabel!
    
    var user: Results<User>?
    var token: NotificationToken?
    
    var team:String!
    var name:String!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        let realm = try! Realm()
        let user = realm.objects(User)[0]
        
        var team1:String!
        var name1:String!
        
        team1 = user.team
        teamLabel.text = team1
        name1 = user.name
        nameLabel.text = name1

        let pickerView = UIPickerView()
        pickerView.showsSelectionIndicator = true
        pickerView.delegate = self
        
        textField.inputView = pickerView
        
        var toolBar: UIToolbar!
        toolBar = UIToolbar(frame: CGRectMake(0, self.view.frame.size.height/6, self.view.frame.size.width, 40.0))
        toolBar.layer.position = CGPoint(x: self.view.frame.size.width/2, y: self.view.frame.size.height-20.0)
        toolBar.barStyle = .BlackTranslucent
        toolBar.tintColor = UIColor.whiteColor()
        toolBar.backgroundColor = UIColor.blackColor()
        
        let toolBarBtn = UIBarButtonItem(title: "    完了    ", style: .Done, target: self, action: #selector(ViewController3.tappedToolBarBtn(_:)))
        toolBarBtn.tag = 1
        toolBar.items = [toolBarBtn]
        textField.inputAccessoryView = toolBar
        
        token = realm.addNotificationBlock { /*[weak self]*/ (notification, realm) -> Void in
            /*self?.*/pickerView.reloadAllComponents()
        }
    }
    
    @IBAction func textFieldDidEndOnExit(sender: UITextField) {
        //変数定義
        textField.delegate = self
        textField2.delegate = self
        
        let realm = try! Realm()
        let user = User()
        try! realm.write {

        team = textField.text
        user.team = team
        name = textField2.text
        user.name = name
        }
    }
    //pickerに表示する列数を返す
    func numberOfComponentsInPickerView(pickerView: UIPickerView!) -> Int {
        return 1
    }
    //pickerに表示する値を返すデリゲートメソッド
    func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> Int? {
        if let user = user {
            return user.count
        }
        return 0
    }
    //pickerが選択された際に呼ばれるデリゲートメソッド
    func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
        if let user = user {
            return user[row].team
        }
        return nil
    }
    func tappedToolBarBtn(sender: UIBarButtonItem) {
        textField.resignFirstResponder()
    }
}

試したこと

前項のUITextFieldにチーム名・選手名を入力。
後項のUITextFieldをタップすると、前項で入力した内容が、UIPickerViewで参照できる。
その中から1つを選んで書き換えるモードになって、改行をタップすると更新が完了する。
という内容にしたいと思っていますが、
まだそこまでできあがっていません。
というか、初心者のため、そこまでの知識がありません。

どなたか解る方ご教授お願いします。

補足情報(言語/FW/ツール等のバージョンなど)

RealmSwift 0.98.6
Xcode 7.3

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

質問への追記・修正の依頼

  • YasuhiroMiyake

    2016/04/19 08:57

    >前項のUITextFieldにチーム名・選手名を入力。
    >後項のUITextFieldをタップすると、前項で入力した内容が、UIPickerViewで参照できる。
    >その中から1つを選んで書き換えるモードになって、改行をタップすると更新が完了する。
    >という内容にしたいと思っていますが、
    >まだそこまでできあがっていません。
    >というか、初心者のため、そこまでの知識がありません。

    書かれている内容が全て出来ないのでしょうか。
    それとも一部が出来ないのでしょうか。

    順番に確認して何が出来ていないのかを確かめて下さい。
    1. 書き込まれた値はRealmに渡す前に存在しているか
    2. Realmに渡して正しく登録出来ているか
    3. Realmから正しく値が取得出来ているか
    4. 取得した値を画面に表示出来ているか
    5. 編集した内容をRealmに渡す前に存在しているか
    6. Realmに渡した値が反映されているのか
    7. 最初の画面でRealmの値を取得しなおしているのか。

    キャンセル

まだ回答がついていません

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

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