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

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

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

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

Swift

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

解決済

[swift 5]Thread 1: EXC_BAD_ACCESS (code=2, address=0x16cf07fe0)

Kaguya_4869
Kaguya_4869

総合スコア114

Xcode

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

Swift

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

2回答

0評価

0クリップ

7695閲覧

投稿2019/11/30 06:27

編集2019/11/30 07:12

#質問したいこと
いつもお世話になっております。今回もまたメモ帳アプリを作っていたら
Thread 1: EXC_BAD_ACCESS (code=2, address=0x16cf07fe0)
というエラーが出てきました。調べてみたのですが、どこをどう直せばいいのかわからず、聞いてみた次第です。
#コード

swift

//ホーム画面 import UIKit class ViewController: UIViewController,UITableViewDataSource,UITableViewDelegate { @IBOutlet weak var memoTableView: UITableView! var image: UIImage! var saveArray: Array = [NSData]() var memoArray = [String]() let ud = UserDefaults.standard func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { tableView.reloadData() return memoArray.count } func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCell(withIdentifier: "memoCell", for: indexPath) as! TableViewCell cell.cellLabel.text = memoArray[indexPath.row] tableView.reloadData() return cell } func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { self.performSegue(withIdentifier: "toDetail", sender: nil) //押したら押した状態を解除 tableView.deselectRow(at: indexPath, animated: true) } override func viewDidLoad() { super.viewDidLoad() memoTableView.delegate = self memoTableView.dataSource = self memoTableView.reloadData() } override func viewWillAppear(_ animated: Bool) { loadMemo() } override func prepare(for segue: UIStoryboardSegue, sender: Any?) { //destinationのクラッシュ防ぐ if segue.identifier == "toDetail"{ //detailViewControllerを取得 //as! DetailViewControllerでダウンキャストしている let detailViewController = segue.destination as! DetailViewController //遷移前に選ばれているCellが取得できる let selectedIndexPath = memoTableView.indexPathForSelectedRow! detailViewController.selectedMemo = memoArray[selectedIndexPath.row] detailViewController.selectedRow = selectedIndexPath.row } } func loadMemo(){ if ud.array(forKey: "memoArray") != nil{ //取得 またas!でアンラップしているのでnilじゃない時のみ memoArray = ud.array(forKey: "memoArray") as![String] //reloadしてくれる memoTableView.reloadData() } } func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCell.EditingStyle, forRowAt indexPath: IndexPath) { //アラート表示 // deleteShowAlert() if editingStyle == .delete { //resultArray内のindexPathのrow番目をremove(消去)する memoArray.remove(at: indexPath.row) //再びアプリ内に消去した配列を保存 ud.set(memoArray, forKey: "memoArray") //tableViewを更新 memoTableView.reloadData() } } }

swift

//ホーム画面のtableViewCell import UIKit class TableViewCell: UITableViewCell { @IBOutlet weak var cellImage: UIImageView! @IBOutlet weak var cellLabel: UILabel! let uuid = NSUUID().uuidString override func awakeFromNib() { super.awakeFromNib() let imageData:NSData = UserDefaults.standard.object(forKey: "saveImage") as! NSData cellImage.image = UIImage(data: imageData as Data) // Initialization code } override func setSelected(_ selected: Bool, animated: Bool) { super.setSelected(selected, animated: animated) // Configure the view for the selected state } //ここを追加 func fill(image: UIImageView, titleLb: String, date: String, siteName: String){ cellImage.image = imageView?.image } // 追加 override func prepareForReuse() { super.prepareForReuse() cellImage.image = imageView?.image } func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCell(withIdentifier: "tableViewCell", for: indexPath) as! TableViewCell //画像を初期化 cellImage.image = nil return cell } }

#やってみたこと(追記)
https://teratail.com/questions/146787Swift次のコードでThread 1: EXC_BAD_ACCESS (code=2, address=0x110d75ea8)のエラーがでます。。
をみてみましたが、カスタムクラスが間違っているとうはありませんでした。
#エラー

error

Thread 1: EXC_BAD_ACCESS (code=2, address=0x16cf07fe0)

#追記
ログの部分
ログ
エラーの部分
イメージ説明
至急よろしくお願いします。

良い質問の評価を上げる

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

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

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

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

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

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

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

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

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

popai306

2019/11/30 06:42

EXC_BAD_ACCESS系って自分の経験的に、xibファイルとコードの連携がうまくできてないときに出るメッセージな感じがしてます。 具体的にどのソースコードの行でEXC_BAD_ACCESSになってるかエラーメッセージからわかりますか?
Kaguya_4869

2019/11/30 06:50

早速ありがとうございます! エラーメッセージが(11db)としか書いていなくて、どうすればいいかわからない状態です。
popai306

2019/11/30 06:51

ログのところにフィルターかけてませんか?
Kaguya_4869

2019/11/30 06:56

フィルターかけてません。
Kaguya_4869

2019/11/30 06:57

写真追加してみました。
popai306

2019/11/30 07:05

上の画像のときに、ソースコード上でハイライトされてる行ってどこになります?
Kaguya_4869

2019/11/30 07:09

どこかよくわからないので、追記で画像のせておきました。
Kaguya_4869

2019/11/30 07:14

ViewControllerのViewdidLoadっぽいのでコードみてみましたが、 override func viewDidLoad() { super.viewDidLoad() memoTableView.delegate = self memoTableView.dataSource = self memoTableView.reloadData() } とかいてあります。
popai306

2019/11/30 07:14

ありがとうございます。 ViewDidLoadのタイミングですね
退会済みユーザー

退会済みユーザー

2019/11/30 07:18 編集

1:ViewControllerのsuper.viewDidLoad()の下に、print("memoTableView:" , memoTableView)と書くと、コンソールに何が出力されますか? 2: numberOfRowsInSectionのtableView.reloadData()をコメントアウトするとどうなりますか? 3: cellForRowAtが、カスタムセルの中にありますが、これでビルドできてますか? 取り敢えず1から一つずつ試してみてください
popai306

2019/11/30 07:18

ソースコードってどっかから拾って自分で修正した感じですか?
Kaguya_4869

2019/11/30 07:22

1:memoTableView: Optional(<UITableView: 0x1268c9000; frame = (0 88; 414 808); clipsToBounds = YES; autoresize = RM+BM; gestureRecognizers = <NSArray: 0x28206fcc0>; layer = <CALayer: 0x282e2b860>; contentOffset: {0, 0}; contentSize: {0, 0}; adjustedContentInset: {0, 0, 0, 0}; dataSource: (null)>)が表示されます。 2:違うThread 1: Fatal error: Unexpectedly found nil while unwrapping an Optional valueというエラーが出されます。tableViewCellの26行目 let imageData:NSData = UserDefaults.standard.object(forKey: "saveImage") as! NSData に問題があると言われています。 3:前までビルドできていました。 ソースコードは色々なサイトの物を組み合わせたりしています。
退会済みユーザー

退会済みユーザー

2019/11/30 07:29

2のコメントアウトで、エラーが変わったと言うことですか?
退会済みユーザー

退会済みユーザー

2019/11/30 07:37

コード読みました、私にはあなたが何をしたいか理解できないので、お役に立てないと思います。ごめんなさい。 そのエラーは、データがないか、キャストできないってことなので、安全にアンラップしてあげてください。 もう少し基礎的なところに戻って一つ一つ確実にこなしてみるのが良いと思います。
Kaguya_4869

2019/11/30 07:38

わざわざありがとうございます。
退会済みユーザー

退会済みユーザー

2019/11/30 07:54 編集

以前の質問に掲載されているtableViewのコードには、辺なところにreloadData()があったりしないので、画像を扱いたいためにカスタムセルでつまっているのかな? カスタムセルのUILabelに文字列を渡すだけのtableViewをつくってみてなれてみてはどうでしょうか? https://yuu.1000quu.com/use_a_custom_cell_in_swift
Kaguya_4869

2019/11/30 08:01

ありがとうございます。

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

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

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

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

Xcode

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

Swift

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