2009-08-14 64 views
2

这个问题有事情做与我张贴在这里的问题是:Iphone Core Data crashing on Save 但错误是不同的,所以我想提出一个新问题。现在,我试图插入新对象到我managedObjectContext时出现此错误:iPhone核心数据内部不一致

*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', 
reason: '"MailMessage" is not a subclass of NSManagedObject.' 

但显然,它是:

@interface MailMessage : NSManagedObject { .... 

当我运行此代码:

NSManagedObjectModel *managedObjectModel = [[self.managedObjectContext 
    persistentStoreCoordinator] managedObjectModel]; 

NSEntityDescription *entity =[[managedObjectModel entitiesByName] 
    objectForKey:@"MailMessage"]; 

NSManagedObject *newObject = [[NSManagedObject alloc] initWithEntity:entity 
    insertIntoManagedObjectContext:self.managedObjectContext]; 

它运行很好,当我不出示MFMailComposeViewController,但如果我运行这个代码中的

- (void)mailComposeController:(MFMailComposeViewController*)controller 
    didFinishWithResult:(MFMailComposeResult)result error:(NSError*)error { 

方法,它在创建newObject变量时引发上述错误。 当我使用的打印对象的实体对象产生如下:

(<NSEntityDescription: 0x1202e0>) name MailMessage, managedObjectClassName MailMessage, 
    renamingIdentifier MailMessage, isAbstract 0, superentity name (null), properties { 
在这两种情况下

,所以我不认为managedObjectContext是完全无效的。我不知道为什么它会说MailMessage不是NSManagedObject的子类,而不是另一个。

任何帮助将不胜感激,在此先感谢。

回答

0

我能够通过在呈现模态视图控制器之前创建MailMessage对象来解决此问题。一旦MailMessage对象已被创建,保存更改不会出现问题。一个奇怪的解决方法,并没有解决实际问题,据我所知,但它的工作原理。

0

尝试重置模拟器或从设备上卸载应用程序。 NSInternalInconsistencyException通常与更改数据模型和数据库不相应更新有关。

+0

我试过了:(还是同样的错误 – kiyoshi 2009-08-18 01:23:01

10

类MailMessage可以在库或框架中的其他位置实现。由于Objective C没有实现名称空间,因此将使用其中的一个。哪一个是未定义的。尝试给你的班级一个不同的名字来快速解决问题。

+0

我从来没有想过那个.....修好了一切...... :)谢谢! :D 尽管我不得不承认,新的xCode 4在改变名称时真的很烦人......我不得不创建一个新的实体并复制所有的属性/连接... /: – 2011-06-29 03:00:32

+5

非常感谢。我一整天都陷入了这个问题。我使用了一个实体“帐户”,...总是得到错误。我通过将其更改为“XXXAccount”进行了修复。 – 2012-01-26 14:16:23

4

从调试器中查找这样的消息。它会证实本杰明说的。

类MailMesssage在两个/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator4.2.sdk/System/Library/PrivateFrameworks/Message.framework/Message/Users/home/Library/Application Support/iPhone Simulator/4.2/Applications/FFFFFFFF-FFFF-0000-0000-AAAAAAAAAAA/Projects.app/Projects实现。将使用两者之一。哪一个是未定义的。

+0

还没有尝试过我的自我,但如果是这样,它值得赞许...... :) – 2011-06-29 04:37:10