title: An NSManagedObject of class 'NSManagedObject' must have a valid NSEntityDescription
body: <p>I am working on <code>Objective-C</code> with CoreData, i am getting below error...</p>
  
  <blockquote>
    <p>*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'An NSManagedObject of class
    'NSManagedObject' must have a valid NSEntityDescription.'</p>
  </blockquote>
  
  <p>I added <code>CoreData</code> to my project. I created <code>saveData</code> method in <code>viewControllerA</code> and i called it in <code>viewControllerB</code>. </p>
  
  <p>In this scenario I am getting error, if I call saveData method in <code>viewDidLoad</code> of <code>viewControllerA</code> it's working properly.</p>
  
  <pre><code>In AppDelegate.h
  
  @property (readonly, strong, nonatomic) NSManagedObjectContext *managedObjectContext;
  @property (readonly, strong, nonatomic) NSManagedObjectModel *managedObjectModel;
  @property (readonly, strong, nonatomic) NSPersistentStoreCoordinator *persistentStoreCoordinator;
  
  In AppDelegate.m
  
  #pragma mark - Core Data stack
  
  @synthesize managedObjectContext = _managedObjectContext;
  @synthesize managedObjectModel = _managedObjectModel;
  @synthesize persistentStoreCoordinator = _persistentStoreCoordinator;
  
  - (NSURL *)applicationDocumentsDirectory {
  // The directory the application uses to store the Core Data store file. This code uses a directory named "com.brninfotech._607_introToCoreDataFinal" in the application's documents directory.
  return [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject];
  }
  
  - (NSManagedObjectModel *)managedObjectModel {
  // The managed object model for the application. It is a fatal error for the application not to be able to find and load its model.
  if (_managedObjectModel != nil) {
      return _managedObjectModel;
  }
  NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"VehicleNumberDataBase" withExtension:@"momd"];
  _managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL];
  return _managedObjectModel;
  }
  
  - (NSPersistentStoreCoordinator *)persistentStoreCoordinator {
  // The persistent store coordinator for the application. This implementation creates and returns a coordinator, having added the store for the application to it.
  if (_persistentStoreCoordinator != nil) {
      return _persistentStoreCoordinator;
  }
  
  // Create the coordinator and store
  
  _persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]];
  NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"VehicleNumberDataBase.sqlite"];
  
  
  //    NSLog(@"StoreURL is %@",storeURL);
  NSError *error = nil;
  NSString *failureReason = @"There was an error creating or loading the application's saved data.";
  if (![_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:nil error:&amp;error]) {
      // Report any error we got.
      NSMutableDictionary *dict = [NSMutableDictionary dictionary];
      dict[NSLocalizedDescriptionKey] = @"Failed to initialize the application's saved data";
      dict[NSLocalizedFailureReasonErrorKey] = failureReason;
      dict[NSUnderlyingErrorKey] = error;
      error = [NSError errorWithDomain:@"YOUR_ERROR_DOMAIN" code:9999 userInfo:dict];
      // Replace this 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();
  }
  
  return _persistentStoreCoordinator;
  }
  
  
  - (NSManagedObjectContext *)managedObjectContext {
  // Returns the managed object context for the application (which is already bound to the persistent store coordinator for the application.)
  if (_managedObjectContext != nil) {
      return _managedObjectContext;
  }
  
  NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator];
  if (!coordinator) {
      return nil;
  }
  _managedObjectContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSMainQueueConcurrencyType];
  [_managedObjectContext setPersistentStoreCoordinator:coordinator];
  return _managedObjectContext;
  }
  
  #pragma mark - Core Data Saving support
  
  - (void)saveContext {
  NSManagedObjectContext *managedObjectContext = self.managedObjectContext;
  if (managedObjectContext != nil) {
      NSError *error = nil;
      if ([managedObjectContext hasChanges] &amp;&amp; ![managedObjectContext save:&amp;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();
      }
  }
  }
  
  
  in viewControllerA viewDidLoad 
  
  self.ad = (AppDelegate *)[[UIApplication sharedApplication]delegate];
  self.VehicleNumberED = [NSEntityDescription entityForName:@"VehicleNumberEntity" inManagedObjectContext:self.ad.managedObjectContext];
  
  - (void)saveData {
  
  NSManagedObject * managedObj = [[NSManagedObject alloc]initWithEntity:self.VehicleNumberED insertIntoManagedObjectContext:self.ad.managedObjectContext];
  
  [managedObj setValue:self.textFieldString forKey:@"vehicleNumberAtt"];
  
  NSError * errorObj;
  [self.ad.managedObjectContext save:&amp;errorObj];
  
  if (errorObj) {
      NSLog(@"Something goes wrong");
  }else {
      NSLog(@"Saved Successfully");
  }
  
  NSFetchRequest * fetReq = [NSFetchRequest fetchRequestWithEntityName:@"VehicleNumberEntity"];
  
  NSError * fetchErrorObj;
  
  self.storedDataArray = [self.ad.managedObjectContext executeFetchRequest:fetReq error:&amp;fetchErrorObj];
  
  
  NSLog(@"array count is %lu", self.storedDataArray.count);
  
  for (int i=0; i&lt;self.storedDataArray.count; i++) {
  
      self.storedManagedObj = [self.storedDataArray objectAtIndex:i];
  
      self.vehicleNumberArray = [self.storedManagedObj valueForKey:@"vehicleNumberAtt"];
  
  }
  
  NSLog(@"Vehicle number is : %@", [self.storedManagedObj valueForKey:@"vehicleNumberAtt"]);
  
  }
  
  in ViewVontrollerB 
  
  - (IBAction)saveVehicleNumberButton:(UIButton *)sender {
  
  VehicleDetailsViewController *vedvc = [[VehicleDetailsViewController alloc]init];
  vedvc = [self.storyboard instantiateViewControllerWithIdentifier:@"VeDVC"];
  vedvc.textFieldString = self.vehicleNumberTextField.text;
  [vedvc saveData];
  
  [self.navigationController pushViewController:vedvc animated:YES];
  }
  </code></pre>