初心者です。
XcodeとNCMBを用いています。
実現したいこと
前の画面でNextボタンを押したら画面遷移すると同時に、ニフティクラウドのクラス(praise)に保存したField(word)の内容がランダムでtextviewに表示されるようにしたいです。
発生している問題
しかし、前画面でNextボタンを押すと画面遷移はできるのですが、実現したいことに書いた表示したい内容が次画面のtextviewに表示されません。
ソースコード
import UIKit import NCMB import KRProgressHUD class PoemViewController: UIViewController { @IBOutlet var praiseTextView: UITextView! var praiseArray = [NCMBObject]() var praiseTag = "" var relaxTag = "" var selectedPraise: NCMBObject! let ud = UserDefaults.standard override func viewDidLoad() { super.viewDidLoad() loadData() } func loadData(){ KRProgressHUD.show() let query = NCMBQuery(className: "praise") query?.whereKey("Tag", equalTo: praiseTag) query?.findObjectsInBackground({[self] (results, error) in if error != nil{ print("error") } else { for i in results as! [NCMBObject]{ praiseArray .append(i) } KRProgressHUD.dismiss() selectedPraise = praiseArray.randomElement() praiseTextView.text = selectedPraise?.object(forKey: "word")as? String if let word = selectedPraise?.object(forKey: "word") as? String { praiseTextView.text = word } } //データを渡す }) } @IBAction func nextButton(){ relaxTag = "bb" ud.set(relaxTag, forKey: "Tag") performSegue(withIdentifier: "showCell", sender: nil) } override func prepare(for segue: UIStoryboardSegue, sender: Any?) { // 次の画面を取得(次の画面のオブジェクトを取得) if segue.identifier == "showCell"{ // ④ let relaxViewController = segue.destination as! RelaxViewController print(relaxTag) relaxViewController.relaxTag = relaxTag } } }
前画面のコード
import UIKit import NCMB class WordViewController: UIViewController { @IBOutlet var memotextView: UITextView! var praiseTag = "" let ud = UserDefaults.standard override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view. } override func viewWillAppear(_ animated: Bool) { memotextView.becomeFirstResponder() } @IBAction func nextButton(){ praiseTag = "aa" ud.set(praiseTag, forKey: "Tag") //画面遷移をする performSegue(withIdentifier: "showWord", sender: nil) // loaddata() } //saveButtonを押して,UserDefaultsで端末に保存 @IBAction func saveButton(){ let inputText = memotextView.text let ud = UserDefaults.standard if ud.array(forKey: "memoArray") != nil{ var saveMemoArray = ud.array(forKey: "memoArray") as![String] if inputText != nil{ saveMemoArray.append(inputText!) }else{ print("何も入力されていません") } ud.set(saveMemoArray, forKey: "memoArray") }else{ var newMemoArray = [String]() if inputText != nil{ newMemoArray.append(inputText!) }else{ print("何も入力されていません") } ud.set(newMemoArray, forKey: "memoArray") } ud.synchronize() self.dismiss(animated: true, completion: nil) let alertController = UIAlertController(title: "保存完了!", message: "日記感覚で使ってね!", preferredStyle: .alert) let action = UIAlertAction(title: "閉じる", style: .default) { (action) in } alertController.addAction(action) self.present(alertController, animated: true, completion: nil) } }
自分が思う原因
①
if let word = selectedPraise?.object(forKey: "word") as? String { praiseTextView.text = word
ここでいうwordとはニフティクラウド上で作成したクラスのなかのfieldの名前なので=の後に入れていいのかわからないです。
②
for i in results as! [NCMBObject]{ praiseArray .append(i)
の部分でresultsが空っぽでpraiseArrayになにも追加されていなくてtextviewに表示するものがないのか
③
selectedPraise?.object(forKey: "word")
で、適切な値を得られていないのか
いずれの場合も対処法がわからず、困っています。ご教示の程よろしくお願いいたします。
問題の発生した環境
Xcode SWift
あなたの回答
tips
プレビュー