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

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

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

mBaaSとはモバイルアプリケーションでの利用に特化したBaaSです。スマートフォン向けのWebアプリケーションが必要とするサーバ側の様々な機能をインターネットを通じてサービスとして提供しています。

ニフティクラウドmobile backend

ニフティクラウドmobile backend (mBaaS)はニフティが提供するBaasサービスです。プッシュ通知、データストア、ファイルストア、会員管理・認証機能などのバックエンド機能をクラウドから提供しています。 Andoird/iOS/JavaScript/Unityと各種SDKに対応しています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

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

Q&A

0回答

1102閲覧

画面遷移と同時にニフティクラウドから取得したデータをランダムでtextviewに表示したいです。

goodyogurt

総合スコア1

mBaaS

mBaaSとはモバイルアプリケーションでの利用に特化したBaaSです。スマートフォン向けのWebアプリケーションが必要とするサーバ側の様々な機能をインターネットを通じてサービスとして提供しています。

ニフティクラウドmobile backend

ニフティクラウドmobile backend (mBaaS)はニフティが提供するBaasサービスです。プッシュ通知、データストア、ファイルストア、会員管理・認証機能などのバックエンド機能をクラウドから提供しています。 Andoird/iOS/JavaScript/Unityと各種SDKに対応しています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

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

0グッド

0クリップ

投稿2021/10/04 16:51

編集2021/10/06 01:08

初心者です。
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

前画面
![イメージ説明

問題が起こっている画面
イメージ説明

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

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

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

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

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

hoshi-takanori

2021/10/05 00:29

praiseTag が "" のままで、検索条件が成り立たないのでは…。
goodyogurt

2021/10/05 01:11

ご回答ありがとうございます! しかし同じ条件でrelaxTagも同じようにニフティクラウドからデータを取ってきてラベルに表示できているのですが、何が問題なのでしょうか? 一つ前のcontrollerでrelaxTagと同じようにTagを設定しています。 @IBAction func nextButton(){ praiseTag = "aa" ud.set(praiseTag, forKey: "Tag") //画面遷移をする performSegue(withIdentifier: "showWord", sender: nil)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問