Iphone从核心数据中获取数据并在表格中显示

时间:2012-05-31 18:17:43

标签: iphone core-data uitableview

错误:“原因:'+ 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];
          }

现在有一些地方我需要用托管的objectcontext做些什么..我在想我只是在某处错过了一行代码..

Prerna

1 个答案:

答案 0 :(得分:0)

您必须创建xcdatamodeld。根据您的代码,它应该被称为myapp.xcdatamodeld。在您的案例Data中,此模型应包含您要获取的实体。