代码之家  ›  专栏  ›  技术社区  ›  kiyoshi

iPhone核心数据内部不一致

  •  2
  • kiyoshi  · 技术社区  · 15 年前

    这个问题与我在这里发布的问题有关: Iphone Core Data crashing on Save 但是错误是不同的,所以我提出了一个新问题。现在,我在尝试将新对象插入ManagedObjectContext时遇到此错误:

     *** 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的子类,而不是另一个。

    如有任何帮助,请提前感谢。

    4 回复  |  直到 14 年前
        1
  •  10
  •   Benjamin Ortuzar    14 年前

    类mailmessage可以在库中或框架中的其他地方实现。由于目标C不实现名称空间,因此将使用这两个名称空间中的一个。哪个是未定义的。试着给你的班级起一个不同的名字来快速解决这个问题。

        2
  •  4
  •   axel22    14 年前

    从调试器中查找类似的消息。它将证实本杰明所说的话。

    类mailmessage在 /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 .将使用其中一个。哪个是未定义的。

        3
  •  0
  •   Matthew Bischoff    15 年前

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

        4
  •  0
  •   kiyoshi    15 年前

    我可以通过在显示模式视图控制器之前创建mailmessage对象来解决这个问题。一旦创建了mailmessage对象,保存更改就不会出现问题。一个奇怪的解决方法,据我所知,并没有解决实际问题,但它是有效的。