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

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

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

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

Swift

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

Q&A

0回答

1530閲覧

CoreDataに関するエラー

meia

総合スコア26

Xcode

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

Swift

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

0グッド

0クリップ

投稿2017/06/14 01:35

編集2017/06/14 09:50

###前提・実現したいこと

swift3での作業です

今までCoreDataを使って、アプリの情報を保存していたのですが、CoreDataを使うページ全てでエラーが出るようになって、落ちてしまうようになってしまいました。

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

-[NSPersistentStoreCoordinator executeFetchRequest:error:]: unrecognized selector sent to instance 0x60000126be80 (null) (lldb)

###該当のソースコード
swift

//追加した箇所
let appDelegate:AppDelegate = UIApplication.shared.delegate as! AppDelegate
let context:NSManagedObjectContext = appDelegate.managedObjectContext

//検索する
let fetchRequest:NSFetchRequest<YourRecord> = YourRecord.fetchRequest()
let predicate = NSPredicate(format:"%K CONTAINS %@","qnumber",questionNum)
fetchRequest.predicate = predicate

//この行に緑のラインがかかっています。
let fetchData = try! context.fetch(fetchRequest)

if(!fetchData.isEmpty){ for i in 0..<fetchData.count{ if fetchData[i].answer == 0 { seikaiP += 1 } if fetchData[i].question == true { questionP += 1 } } }

イメージ説明

###試したこと

シュミレーターで本体を変えても、一度アンインストールしても、同様のエラーが出て来ました。
また、数時間前にとったバックアップではこのエラーは起きていませんでした。

変えた部分と言えば、userdefaultsを追加したぐらいで、CoreDataに関する部分は全く触っていないです。
コードを変更していないページでもこのエラーが発生しました

もし同様のエラーを知っていて、対処法がわかる方がいらしたら、どなたかご教授いただけないでしょうか
よろしくお願いします
足りない情報があれば、追加させていただきます

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

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

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

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

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

MasakiHori

2017/06/14 03:02

このエラーからわかるのは context に不正な値が入っているということだけです。 contextに値を代入している個所を確認してください
meia

2017/06/14 09:51

早速ご指摘ありがとうございます!情報を追記させていただいたのですが、これだけで足りますでしょうか?
MasakiHori

2017/06/14 11:36

まだよくわかりませんが、エラーが発生する前の行に print(context)を入れてその結果を教えてもらいますか?
MasakiHori

2017/06/14 11:36

脱線になりますが、Swiftという言語は大変よくできていて今回のような実行時エラーが出にくいように設計されています。 ただし、実行時エラーが発生してしまような書き方もできてしまいます。 それは `!`(強制アンラップ、あるいは例外の無視)を使うことです。コンパイル時のエラーを消すために ! を使えば使うほど危険なアプリケーションになります。 極力 ! を使わないように心がけてください。
meia

2017/06/14 13:03

なるほど、今まではつい指示通りに消してしまっていました。アドバイスとてもありがたいです。printの結果なんですが<NSManagedObjectContext: 0x6000001c8700><NSManagedObjectContext: 0x6000001d4280>など、毎回様々で、ページによって異なりました。
meia

2017/06/14 13:06

あと、おっしゃってくださった通りにprintを入れたり、printを入れずに改行を入れただけで、なぜか編集したページではエラーが出ないようになりました…
MasakiHori

2017/06/15 03:00

通常あり得ないエラーでしたので懸念はしていたのですが、直接関係のないソースコードの変更でエラーが変わったりエラーが出なくなったりする場合、原因箇所の推定が困難になります。 ただ、今回の場合contextの中身が不要になったと認識されデータが削除、上書きされていると推定はできます。 確証は全くありませんが、おそらく AppDelegate.managedObjectContextに問題があると思われます。
meia

2017/06/15 12:59

詳しく解説してくださってありがとうございます!原因の特定が難しいということで、一度バックアップからやり直してみようと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問