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

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

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

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

Swift

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

Q&A

解決済

1回答

1337閲覧

Swift 「Unexpectedly found nil while implicitly unwrapping an Optional value」の解決方法について

tpw

総合スコア4

Xcode

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

Swift

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

0グッド

0クリップ

投稿2021/10/24 14:52

前提・実現したいこと

Realm を使用したゴールとタスク一覧のアプリを作成しております

発生している問題・エラーメッセージ

Table View においてRealm に保存しているデータ数量を引用しようとすると、下記エラーメッセージが出てしまいます

Unexpectedly found nil while implicitly unwrapping an Optional value

該当のソースコード

Swift

1import UIKit 2import RealmSwift 3 4class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource { 5 6 //フィールド認識 7 @IBOutlet weak var VC_TextF_Item1: UITextField! 8 @IBOutlet weak var VC_TextF_Item2: UITextField! 9 @IBOutlet weak var VC_TableV_ItemList: UITableView! 10 11 //Realmオブジェクトを作成 12 let realm = try! Realm() 13 //goal classをインスタンス 14 let goal = identifygoal() 15 //変数認識 16 var allgoals:Results<identifygoal>! 17 18 //最初 19 override func viewDidLoad() { 20 super.viewDidLoad() 21 } 22 23 //TableV 特有1 24 func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 25 return allgoals.count   26================= 27↑ここに「Unexpectedly found nil while implicitly unwrapping an Optional value」がでてしまう。。 28================= 29 } 30 31 //TableV 特有2 32 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 33 let cell = tableView.dequeueReusableCell(withIdentifier: "Cell") 34 cell?.textLabel?.text = allgoals[indexPath.row].FinalGoal 35 cell?.detailTextLabel?.text = allgoals[indexPath.row].Task 36 return cell! 37 } 38 39 //追加ボタン 40 @IBAction func VC_Button_AddItem(_ sender: Any) { 41 //goalを追記 42 goal.FinalGoal = VC_TextF_Item1.text! 43 goal.Task = VC_TextF_Item2.text! 44 45 //Realmオブジェクトにgoalを追加 46 try! realm.write { 47 realm.add(goal) 48 } 49 50 //TextFを空に 51 VC_TextF_Item1.text = "" 52 VC_TextF_Item2.text = "" 53 54 VC_TableV_ItemList.reloadData() 55 56 //Realmからデータ取得 57 let allgoals = realm.objects(identifygoal.self) 58 //取得できているか確認 59 print(allgoals) 60 61} 62 63=========== 64なお、identyfygoal Classは下記です 65 66import Foundation 67import RealmSwift 68 69//Goal Classの作成 70class identifygoal: Object { 71 @objc dynamic var FinalGoal = "" 72 @objc dynamic var Task = "" 73} 74 75 76

試したこと

下記ページをみて、アウトレット接続たるものが失われてしまっている?と思ったのですが、それ以上検索しきれず、解決できませんでした。
https://qiita.com/nsy_python/items/372e6e3737c67bada9f5

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

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

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

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

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

guest

回答1

0

ベストアンサー

ViewControllerallgoals プロパティに値が設定される前(値が nil である状態)に tableView(_:cellForRowAt:) が呼び出され、その中で allgoals を強制アンラップしている(値が非nilであることを前提としてアクセスしている)のが原因と考えられます。

allgoals の値が nil の場合もあり得るとして次のように変更すると、問題が発生しなくなるのではないでしょうか。変更すべき点は2箇所です。

変更点1: allgoals プロパティの宣言の変更

swift

1// Results<identifygoal>! から Results<identifygoal>? に変更 2var allgoals: Results<identifygoal>?

変更点2: allgoals にアクセスする処理を変更

swift

1 func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 2 // `allgoals` の値が `nil` の場合には行の数を0とする 3 return allgoals?.count ?? 0 4 }

投稿2021/10/24 17:24

編集2021/10/24 17:26
__k_san__

総合スコア177

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

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

tpw

2021/10/25 15:13 編集

早速にありがとうございます!週末にしか触れない可能性もあるのですが、触らたらすぐ試してみるように致します。 取り急ぎご回答への御礼まで。
__k_san__

2021/10/26 01:28

コメントありがとうございます。了解しました!
tpw

2021/10/30 06:42 編集

ご回答いただきありがとうございました。 触れるのが遅くなり大変申し訳ございません。 実施してみたところ、ランするようになりました!! のですが、、、今度は2つ問題が出てきてしまいました。。 ①最初の登録(追加)は問題なくできるものの(realmにも登録はされている)、Table Viewが更新されない(一覧化されない) ②連続して2回目の追加を実施しようとすると、AppDelegateにて「Thread 1: "Attempting to modify object outside of a write transaction - call beginWriteTransaction on an RLMRealm instance first."」と出てしまいストップする 本来もっと自分で調べた上でお伺いすべきなのですが、もし要因がさっとおわかりになればご教示いただけると幸いです。
tpw

2021/10/31 12:08

別サンプルで作成してみたところ、うまくいきそうで、それと、ご質問させて頂いたコードで比較すれば解決できる気がします。 少し土日時間とれず、今後の休みにやろうと思いますが、ありがとうございました!!
__k_san__

2021/10/31 18:42

お返事遅くなりましてすみません。 週末は慌ただしくしておりまして回答できませんでしたが、ご自分で解決できそうとのことでよかったです! また何かご不明な点がありましたら、新たに質問を投稿していただければと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問