2011-11-08 3 views
3

私は非常に奇妙なエラーが長い時間働いているアプリケーションで起こっています。奇妙なCoreDataエラー... insertNewObjectForEntityForNameから返された値:壊れているようです

CoreDataモデルで自分のエンティティの1つを作成できなくなりました。

私は私のモデルである特定のエンティティを作成してのNSLogを使用して、それを印刷してみてください( "%の@" @、OBJ)、私はこの奇妙なメッセージが出ます:

2011-11-08 13:03:05.936をiLearnFast [31541:15503] - [__ NSCFNumber objectID]:インスタンスに送信された認識できないセレクタ0xa069e20

このオブジェクトの属性/リレーションシップをループして印刷すると、特定の1対1の関係が[ obj valueForKey:]返す値は、上記のエラーメッセージで説明したものと同じポインター/オブジェクトです。

私はどこかでメモリを破壊している可能性があると思っていましたが、データ構造が初期化されるとすぐに実行可能ファイルの冒頭にエンティティを作成するコードを挿入しました。私はこの時点で何のメモリエラーもしていないことを非常に確信しています(そしてメモリエラーはよりランダムになります...何千ものオブジェクトを作成することができます。同じエンティティは常に同じ関係で同じ問題を持ちます。他のエンティティにも問題があります)。

この1つの関係に問題を絞り込んだ後、他のものとの関係の名前を変更してエラーを解消できることがわかりました。私のアプリケーションが作成されて以来、この関係は「ファイル」と呼ばれています。

それは私の自動軽量移行を台無しが、私は、プロパティの名前を変更して再び自分のコードを動作させることができますが、今はもっと複雑な移行を行う方法を考え出すに対処する必要があります。

誰かが何がうまくいかないかについてのアイディアがあれば、本当に感謝しています。

これは私を困惑させ、AppleのSDKのバグのようなものです。

私は現在XCode 4.2を使用しており、両方のSDKをiOS5.0とiOS4.3の両方で試していますが、どちらも同じ動作でした。

ロン

答えて

4

2011-11-08 13:03:05.936 iLearnFast [31541:15503]は - [__ NSCFNumber オブジェクトID]:認識されていないセレクタは、私はあなたが持っていると思いインスタンスに0xa069e20

を送りましたあなたのコードのリーク。この行は、カスタムNSManagedObjectに含まれるobjectIDプロパティにアクセスしようとしていることを意味しますが、何らかの理由でオブジェクトが存在しなくなりました。メモリリークのコードをチェックしてみてください。

+0

返信いただきありがとうございます!だから私のオブジェクトは何とか壊れたobjectIDを持っていますか?私は、アプリケーションが管理対象オブジェクトモデル/管理オブジェクトコンテキストの作成以外は何もしていないときに、このコードをVERYの最初に置いています。また...どのようにして漏れが問題を引き起こす可能性がありますか?私はどこかでランダムにメモリを踏んでいるかもしれないと思ったが、このエラーはオブジェクトを作成する呼び出しの直後に起こる。 – Ron

+0

私はまた私のオブジェクトをカスタムオブジェクトではなく、代わりにNSManagedObjectに直接変更しようとしました。同じ問題。 NSManagedObjectを作成すると、特定の関係が偽のObjectIDで破損します。 – Ron

+0

おそらく、あなたのオブジェクトをすべて保存しようとしている状況を保存すると、このエラーが発生しましたか? – beryllium

4

Core Dataを使用したSwiftプロジェクトでも同じ問題が発生しました。問題は、私は(それはいくつかの時間のためのシミュレータで正常に動作していた)デバイスにアプリをプッシュするとき、それは頭だ上げます。

この問題は、2つのエンティティ間の関係を中心にしています。問題の画像を参照して説明するために:私は関係、キャプテンプレーヤーの名前を変更することを決め

Problem

いつかSO見回した後。修正画像を参照してください。

Fix

だけの関係の両方「末端」を名前を変更した後にエラーが離れて行きました。

+0

これは私のためにも働いた。誰でも何か考えがありますか? – lostintranslation

1

同じエラーメッセージが表示されていましたが、私の場合、関係プロパティteacherがあり、読み取り専用プロパティisTeacherが作成されていました。

この問題は、Objective-Cの名前の規則によって引き起こされました。CoreDataは、teacherプロパティを取得するのが混乱していました。実際の関係にアクセスするのではなく、isTeacherゲッターをBOOLタイプとし、それをNSNumberにキャストし、CoreDataのように処理してobjectIDと呼んでください。

isTeacherからisTeacherLicenceに変更した後に問題がなくなりました。

+0

私は同じ問題、競合相手と呼ばれる関係プロパティ、およびisCompetitorという計算されたプロパティを持っていました。 isCompetitorの名前をisCompetitorDisplayに変更して問題を解決しました。ありがとう! – Marmoy

関連する問題