何解决NSInternalInconsistencyExcept

何解决NSInternalInconsistencyExcept

本文介绍了我如何解决NSInternalInconsistencyException',原因:'+ entityForName:失败报告的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的代码如下:

NSManagedObjectContext *context = [self.fetchedResultsController managedObjectContext];
        NSEntityDescription *entity = [[self.fetchedResultsController fetchRequest] entity];
        NSManagedObject *newManagedObject = [NSEntityDescription insertNewObjectForEntityForName:[entity name] inManagedObjectContext:context];

        // If appropriate, configure the new managed object.
        [newManagedObject setValue:[NSDate date] forKey:@"date"];

           // Save the context.
            NSError *error = nil;
            if (![context save:&error]) {
                NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
                abort();
        }



in .h header file I have this:

@interface TretiViewController : UIViewController <NSFetchedResultsControllerDelegate> {

 NSFetchedResultsController *fetchedResultsController_;
    NSManagedObjectContext *managedObjectContext_;

 // private NSString *accountID;
}


@property (nonatomic, retain) NSManagedObjectContext *managedObjectContext;
@property (nonatomic, retain) NSFetchedResultsController *fetchedResultsController;

它应该使用核心数据保存数据,但会出现错误:

It should save data using core data but it falls on error:

NavTest[1372:207] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: '+entityForName: could not locate an NSManagedObjectModel for entity name 'Obrat''
*** Call stack at first throw:
(
 0   CoreFoundation                      0x00f92be9 __exceptionPreprocess + 185
 1   libobjc.A.dylib                     0x010e75c2 objc_exception_throw + 47
 2   CoreData                            0x00cbf45b +[NSEntityDescription entityForName:inManagedObjectContext:] + 187
 3   NavTest                             0x0000c210 -[TretiViewController fetchedResultsController] + 187
 4   NavTest                             0x00007a76 -[TretiViewController ukazObrat0] + 38
 5   UIKit                               0x002c4a6e -[UIApplication sendAction:to:from:forEvent:] + 119
 6   UIKit                               0x003531b5 -[UIControl sendAction:to:forEvent:] + 67
 7   UIKit                               0x00355647 -[UIControl(Internal) _sendActionsForEvents:withEvent:] + 527
 8   UIKit                               0x00354438 -[UIControl touchesBegan:withEvent:] + 277
 9   UIKit                               0x0054f987 _UIGestureRecognizerSortAndSendDelayedTouches + 3609
 10  UIKit                               0x005500fc _UIGestureRecognizerUpdateObserver + 927
 11  CoreFoundation                      0x00f73fbb __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ + 27
 12  CoreFoundation                      0x00f090e7 __CFRunLoopDoObservers + 295
 13  CoreFoundation                      0x00ed1bd7 __CFRunLoopRun + 1575
 14  CoreFoundation                      0x00ed1240 CFRunLoopRunSpecific + 208
 15  CoreFoundation                      0x00ed1161 CFRunLoopRunInMode + 97
 16  GraphicsServices                    0x018c7268 GSEventRunModal + 217
 17  GraphicsServices                    0x018c732d GSEventRun + 115
 18  UIKit                               0x002d342e UIApplicationMain + 1160
 19  NavTest                             0x00002594 main + 102
 20  NavTest                             0x00002525 start + 53
)

NavTest.xcdatamodel 我有两个entytis Obrta whith 属性 Evet 这是默认值。

in NavTest.xcdatamodel I have two entytis Obrta whith attributes and Evet which is default.

- (NSFetchedResultsController *)fetchedResultsController {

    if (fetchedResultsController_ != nil) {
        return fetchedResultsController_;
    }


   //  Set up the fetched results controller.

  // Create the fetch request for the entity.
  NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
  // Edit the entity name as appropriate.
  NSEntityDescription *entity = [NSEntityDescription entityForName:@"Obrat" inManagedObjectContext:self.managedObjectContext];
  [fetchRequest setEntity:entity];

  // Set the batch size to a suitable number.
  [fetchRequest setFetchBatchSize:20];

  // Edit the sort key as appropriate.
  NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"date" ascending:NO];
  NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil];

  [fetchRequest setSortDescriptors:sortDescriptors];

  // Edit the section name key path and cache name if appropriate.
  // nil for section name key path means "no sections".
  NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:self.managedObjectContext sectionNameKeyPath:nil cacheName:@"Root"];
  aFetchedResultsController.delegate = self;
  self.fetchedResultsController = aFetchedResultsController;

  [aFetchedResultsController release];
  [fetchRequest release];
  [sortDescriptor release];
  [sortDescriptors release];

  NSError *error = nil;
  if (![fetchedResultsController_ performFetch:&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. If it is not possible to recover from the error, display an alert panel that instructs the user to quit the application by pressing the Home button.

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

  return fetchedResultsController_;
  }

我缺少什么?

推荐答案

更改 fetchedResultsController 中的代码:

NSEntityDescription *entity = [NSEntityDescription entityForName:@"Obrat" inManagedObjectContext:self.managedObjectContext];

NSEntityDescription *entity = [NSEntityDescription entityForName:@"Obrta" inManagedObjectContext:self.managedObjectContext];

您使用Xcode创建的实体必须保留与您的代码中的 NSEntityDescription 相同

这篇关于我如何解决NSInternalInconsistencyException',原因:'+ entityForName:失败报告的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-15 23:21