2011-07-06 26 views
0

私はIpadと通信し、コアデータを前後に送信するコアデータプロジェクトに取り組んでいます。私はネットワークの部分をほとんど把握していますが、単純なフェッチ要求を受け取ることに問題があります。ここで、フェッチ要求は次のとおりです。フェッチされていないフェッチ要求

NSManagedObjectContext *context=[[[NSDocumentController sharedDocumentController] currentDocument] managedObjectContext]; 
//NSManagedObjectContext *context=[self managedObjectContext]; 
if (context == nil){ 
    NSLog(@"Crap"); 
} 
NSLog(@"Context: %@",context); 
//fetch request: (found here: http://developer.apple.com/library/ios/#documentation/DataManagement/Conceptual/iPhoneCoreData01/Articles/05_Fetching.html) 
NSLog(@"Starting to fetch:"); 

NSFetchRequest *request = [[NSFetchRequest alloc] init]; 
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Song" inManagedObjectContext:context]; 
[request setEntity:entity]; 
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"cueNo" ascending:YES]; 
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil]; 
[request setSortDescriptors:sortDescriptors]; 
[sortDescriptors release]; 
[sortDescriptor release]; 
NSError *error; 
NSMutableArray *mutableFetchResults = [[context executeFetchRequest:request error:&error] mutableCopy]; 

私が使用している場合は、この:次に

NSManagedObjectContext *context=[[[NSDocumentController sharedDocumentController] currentDocument] managedObjectContext]; 

私が言うのエラーが表示されます。

+entityForName: could not locate an NSManagedObjectModel for entity name 'Song'

私はこれを使用する場合:

NSManagedObjectContext *context=[self managedObjectContext]; 

私がdを持っていてもmutableFetchResultsはnullに戻りますエンティティソングのata。

コンテキストを設定するための最初の方法を使用して、このフェッチ要求を以前のバージョンから直接コピーしました。

ご協力いただければ幸いです!

トラブルシューティング:

Printing description of persistentStoreCoordinator: 

Printing description of _managedObjectModel: 
(<NSManagedObjectModel: 0x1001c5250>) isEditable 0, entities { 
    Song = "(<NSEntityDescription: 0x100149ba0>) name Song, managedObjectClassName NSManagedObject, renamingIdentifier Song, isAbstract 0, superentity name (null), properties {\n cueName = \"(<NSAttributeDescription: 0x1001c5600>), name cueName, isOptional 1, isTransient 0, entity Song, renamingIdentifier cueName, validation predicates (\\n), warnings (\\n), versionHashModifier (null), attributeType 700 , attributeValueClassName NSString, defaultValue (null)\";\n cueNo = \"(<NSAttributeDescription: 0x1001c5570>), name cueNo, isOptional 1, isTransient 0, entity Song, renamingIdentifier cueNo, validation predicates (\\n), warnings (\\n), versionHashModifier (null), attributeType 700 , attributeValueClassName NSString, defaultValue (null)\";\n}, subentities {\n}, userInfo {\n}, versionHashModifier (null)"; 
}, fetch request templates { 
    newFetchRequest = "<NSFetchRequest: 0x1001c5420> (entity: Song; predicate: (cueNo < \"0\"); sortDescriptors: (null); limit: 0)"; 
} 

Printing description of _managedObjectContext: 
<NSManagedObjectContext: 0x1001c5890> 

答えて

0

エラーメッセージがかなり明確で、それはNSEntityDescriptionはあなたが提供する管理対象オブジェクトコンテキストでその名前を持つ任意のエンティティを見つけることができなかったことを示しています。コンテキストがゼロではないことを確認しているように見えるので(良い最初のステップ)、次にコアデータスタックの残りの部分を考慮する必要があります。管理オブジェクトコンテキストに永続ストアコーディネータがありますか?確認してください。永続的なストアコーディネータは管理オブジェクトモデルを持っていますか?そのモデルには実際にSongエンティティが含まれていますか?ラインのどこかに何かが壊れていますが、上記の部分がどこで推測できるか不明です。

第2の管理対象オブジェクトのコンテキストオプションの場合、executeFetchRequest:error:はエラーが発生した場合に限りnilを返します。エラーパラメータを渡しているので、何が間違っているかを判断するためにまず調べる必要があります。

フェッチ要求は間違っているとは限りませんが、管理対象オブジェクトのコンテキストが何らかの形で破損していることが示唆されます。

+0

ありがとうございました!私は確認したし、コーディネーターやMOMもいなかった。私は今やるし、モデルには曲のエンティティが含まれている。私はどのようにコンテキストをモデルに結びつけるのか分からない。どんな助けでも大歓迎です。 –

+0

今日はさらにトラブルシューティングを行いました。私は最終的に私のフェッチから何の結果も得られないことに疲れて、プログラムでデータを追加しました。私は最終的に必要な結果を得ましたが、IBが正しく接続されていないという問題を明らかにしました。その問題を追跡するために私が何をすることができますか? –

+0

私はフェッチを踏み、変数 "error"の説明を印刷しました。エラーの説明を印刷します。 NSDocument正しく理解すれば、この変数が正しくない場合にのみ問題が発生しますか? –

0

エンティティSongを含む管理対象オブジェクトモデルがマネージオブジェクトコンテキストにないことを示すエラーが表示されます。管理オブジェクトモデルは.xcdatamodelファイルです。

永続ストアを別のデバイスで開く場合は、ローカルアプリがリモート永続ストアを作成した同じモデルファイルにアクセスできる必要があり、モデルをローカルコンテキストに追加する必要があります。表示されているエラーは、これは起こっていないことを示しています。

これが以前に動作していたのであれば、XcodeのローカルアプリケーションのビルドターゲットからSongエンティティを定義している.xcdatamodelファイルを単に追加したり削除したりしていない可能性があります。

関連する問題