1

Core Data と UIManagedDocuments の使用方法を学ぼうとしています。まず、ドキュメントを作成/開きます。

NSURL *url = [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject];
    url = [url URLByAppendingPathComponent:@"ProjectSSBDB"];

document = [[UIManagedDocument alloc] initWithFileURL:url];

if ([[NSFileManager defaultManager] fileExistsAtPath:[url path]]) 
{
     [document openWithCompletionHandler: ^(BOOL success) 
     {
         if (success) [ProjectSSViewController documentIsReady];
         if (!success) NSLog(@"Couldn't open document at %@", url);
      }];
 } 
 else 
 {
    [document saveToURL:url forSaveOperation:UIDocumentSaveForCreating completionHandler:^(BOOL success) 
            {
               NSLog(@"Returned %d", success);
               if (success) [ProjectSSViewController documentIsReady];
               if (!success) NSLog(@"Couldn't create document at %@", url);
             }];
 }    

次に、ドキュメントが作成されて正常に開かれたら、次のようにします。

 if (document.documentState == UIDocumentStateNormal) 
   {

            NSManagedObjectContext *context = [document managedObjectContext];

            Exercise *exercise = (Exercise *) [NSEntityDescription insertNewObjectForEntityForName:@"Exercise" inManagedObjectContext:context];
    }

ここの最後の行は、「+entityForName: nil は、エンティティ名「Exercise」を検索する正当な NSManagedObjectContext パラメータではありません」というエラーを表示する行のようです。

「演習」エンティティを持つデータ モデルを確実に作成しました。私が行った読書から、それは異なるスレッドがコンテキストと相互作用する方法と関係があるのでしょうか? しかし、私にはよくわかりません。どんなガイダンスでも素晴らしいでしょう!

4

1 に答える 1

0

+entityForName: nil は、エンティティ名 'Exercise' を検索する有効な NSManagedObjectContext パラメータではありません

可能性は 3 つだけです。

  1. エンティティ名のつづりを間違える。たとえば、Exercise ではなく Exercises。
  2. nil 管理オブジェクト コンテキストを持つ
  3. マネージ オブジェクト モデルがロードされていないか、ロードされていない。

ケースのほとんどの確率は2番目のものです(管理対象オブジェクトのコンテキストが Nil である可能性があります)。

于 2013-06-13T12:01:25.277 に答える