2013年8月8日木曜日

CoreData でリレーションのモデルを追加しようとすると落ちる

iOS のはなし。

CoreData を使用して、データの永続化を図ろうとしているが、今回リレーションを結んだモデルについて代入を行う際に、上手く動かなかった。

なんならと、リレーションを組んでいる親のモデルに対してのみデータを入れてみた所、登録処理は出来るが、取得後参照の時に例外が発生してしまう状態になった。

ここまでの流として、まずサンプルを見ながら作成して、その後に自分での新規実装を行ってみた流となっている。そのために、見落とし事項があるかとは思ったが、ざっと見たところ問題が無かったので、しばらく悩んでしまった。

今回の場合、結果的には、

「xxxx.scdatamodeled に記述しているクラス変数名と、モデルに記述しているクラス変数名が一致していなかった」

と、言う事だった。

具体的には、「xxxx.scdatamodeled」 に記述しているクラス変数名は「全て小文字」で書いたが、モデルに記述しているクラス変数名は、「大文字小文字が入り交じっている(キャメルケース)」で書いていた。
このため関係が一致せずに、リレーションのクラスを参照使用とすると、割り付けられていないアドレスに対してのアクセスを行って結果的に例外発生の流れになっていた。

対応としては、「記述を小文字に統一(大文字やキャメルケースでも良いので統一)」することにより、問題なく登録や取得等々の操作ができる事を確認した。


こういった作業の際はどうしても、解決に時間がかかると日和ってしまい、

「俺は悪くない!!環境が、いやデータが。。。ごにょごにょ」

と、若干逃げてしまい、

「色々いじりながら、やっていたので DB がおかしくなったんだな」
と決め込んで、データを消してみたり、、一旦シミュレータのデータを消して再度動かしてみたり、クリーンビルドをして確認してみたりしするのだが、8 ~ 9 割は

「コンピュータを疑うな!まずは自分を疑え!!」

と言う事になる。
今回もこのパターンだった。。。

0 件のコメント:

コメントを投稿