0

错误:“原因:'+entityForName:找不到实体名称的 NSManagedObjectModel”

我使用选项卡式应用程序创建了一个新项目。我创建了多个选项卡,然后在我的 delegate.h 文件中添加了核心数据函数,如下所示。

    @property (readonly, strong, nonatomic) NSManagedObjectContext *managedObjectContext;
    @property (readonly, strong, nonatomic) NSManagedObjectModel *managedObjectModel;
    @property (readonly, strong, nonatomic) NSPersistentStoreCoordinator *persistentStoreCoordinator;

    - (void)saveContext;
     - (NSURL *)applicationDocumentsDirectory;

现在我改变了 delegate.m 文件如下

    @synthesize window = _window;
    @synthesize managedObjectContext = __managedObjectContext;
    @synthesize managedObjectModel = __managedObjectModel;
    @synthesize persistentStoreCoordinator = __persistentStoreCoordinator;

    #pragma mark -
    #pragma mark Application lifecycle

    - (void)saveContext
    {
    NSError *error = nil;
    NSManagedObjectContext *managedObjectContext = self.managedObjectContext;
     if (managedObjectContext != nil) {
        if ([managedObjectContext hasChanges] && ![managedObjectContext save:&error]) {
           // Replace this implementation with code to handle the error appropriately.
           // abort() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development. 
        NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
        abort();
              } 
           }
         }

         - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
             {
             // Override point for customization after application launch.

              return YES;
               }

        - (void)applicationWillResignActive:(UIApplication *)application
           {

            }

      - (void)applicationDidEnterBackground:(UIApplication *)application
           {

            }

      - (void)applicationWillEnterForeground:(UIApplication *)application
         {

          }

      - (void)applicationDidBecomeActive:(UIApplication *)application
         {
         }

      - (void)applicationWillTerminate:(UIApplication *)application
         {

         [self saveContext];

           }



  #pragma mark - Core Data stack


     - (NSManagedObjectContext *)managedObjectContext
        {
          if (__managedObjectContext != nil) {
              return __managedObjectContext;
               }

           NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator];
           if (coordinator != nil) {
               __managedObjectContext = [[NSManagedObjectContext alloc] init];
               [__managedObjectContext setPersistentStoreCoordinator:coordinator];
                 }
              return __managedObjectContext;
                 }


       - (NSManagedObjectModel *)managedObjectModel
           {
            if (__managedObjectModel != nil) {
                  return __managedObjectModel;
                    }
              NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"myapp" withExtension:@"momd"];
             __managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL];
               return __managedObjectModel;
                 }

      - (NSPersistentStoreCoordinator *)persistentStoreCoordinator
          {
           if (__persistentStoreCoordinator != nil) {
              return __persistentStoreCoordinator;
              }

            NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"myapp.sqlite"];

            NSError *error = nil;
            __persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]];
            if (![__persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:nil error:&error]) {

           NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
            abort();
             }    

        return __persistentStoreCoordinator;
        }

    #pragma mark - Application's Documents directory

      - (NSURL *)applicationDocumentsDirectory
       {
         return [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory            inDomains:NSUserDomainMask] lastObject];
         }

       @end

我有一个视图控制器,我在其中添加数据并且我也能够获取数据但是当我做同样的事情从表中获取数据时,我收到一个错误,它无法找到 coredata 表. 我的 myappTableViewController.h 文件如下:

          #import <UIKit/UIKit.h>
          #import "myappAppDelegate.h"

          @interface myappTableViewController : UITableViewController 


          @property(nonatomic,retain)NSManagedObjectContext *managedObjectContext;
          @property(nonatomic,retain)NSArray *arr;

         -(void)getData;

           @end

在 myappTableViewController.m 文件中,我添加了以下代码:

   -(void)getData{

             NSEntityDescription *entity = [NSEntityDescription entityForName:@"Data" inManagedObjectContext:managedObjectContext];

             NSFetchRequest *request = [[NSFetchRequest alloc] init];

             [request setFetchBatchSize:20];

             [request setEntity:entity];

             NSSortDescriptor *sort = [[NSSortDescriptor alloc] initWithKey:@"name" ascending:YES];

            NSArray *newArray = [NSArray arrayWithObject:sort];

           [request setSortDescriptors:newArray];

           NSError *error;

           NSMutableArray *results = [[managedObjectContext executeFetchRequest:request error:&error] mutableCopy];

           [self setArr:results];

           [self.tableView reloadData];


           }

我打电话给[self getData];在 ViewDidLoad 中。和合成

          @synthesize managedObjectContext,arr;


       - (void)viewDidLoad
          {
            [super viewDidLoad];

             [self getData];
          }

现在有什么地方我需要对托管对象上下文做一些事情。我想我只是在某处丢失了那一行代码。

普雷纳

4

1 回答 1

0

你必须创建你的xcdatamodeld. 根据您的代码,应该调用它myapp.xcdatamodeld。在您的情况下,此模型应包含您要获取的实体Data

于 2012-05-31T21:16:44.387 回答