Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
调试iPhone核心数据错误有困难_Iphone_Objective C_Cocoa Touch_Core Data - Fatal编程技术网

调试iPhone核心数据错误有困难

调试iPhone核心数据错误有困难,iphone,objective-c,cocoa-touch,core-data,Iphone,Objective C,Cocoa Touch,Core Data,我希望有人能帮我调试一个令人沮丧的核心数据崩溃。我最初将数据加载到两个实体(表示“演讲者”和“标题”)中,然后加载“会话”的第三个实体,并尝试将关系设置为“演讲者”和“标题”。(从会议到发言人和标题是一对一。从发言人/标题到会议是一对多)。我使用一个整数键来设置每个关系 由于给定的演讲者和标题可以指向多个会话,因此我编写了一个函数来搜索适当的托管对象并返回该对象。然后我为这段关系设定了 这对演讲者关系很好,但对第二个标题来说,却持续和可怕地崩溃了。我用不同的方法重写了几次代码,结果总是出现同样的

我希望有人能帮我调试一个令人沮丧的核心数据崩溃。我最初将数据加载到两个实体(表示“演讲者”和“标题”)中,然后加载“会话”的第三个实体,并尝试将关系设置为“演讲者”和“标题”。(从会议到发言人和标题是一对一。从发言人/标题到会议是一对多)。我使用一个整数键来设置每个关系

由于给定的演讲者和标题可以指向多个会话,因此我编写了一个函数来搜索适当的托管对象并返回该对象。然后我为这段关系设定了

这对演讲者关系很好,但对第二个标题来说,却持续和可怕地崩溃了。我用不同的方法重写了几次代码,结果总是出现同样的问题。不管什么头衔排在第二位,这个问题都存在。因此,我必须做一些根本错误的事情,但按照更多iPhone3开发中的核心数据章节,我什么都不想做。我希望有人能看到我错过了什么(已经错过了好几天)。(最后一点注意:无论我将managedObjectContext保存在for循环内还是外部,崩溃都会发生。始终在第二个会话上)。我无尽的感谢和我的第一个孩子,感谢任何能帮助我的人

以下是保存会话实体的相关代码:

    for (NSDictionary *session in self.sessions){
        NSManagedObject *newSession = [NSEntityDescription insertNewObjectForEntityForName:[sessionEntity name] inManagedObjectContext:self.managedObjectContext];
        [newSession setValue:[session valueForKey:@"ID"] forKey:@"id"];
        [newSession setValue:[session valueForKey:@"notes"] forKey:@"notes"];
        [newSession setValue:[session valueForKey:@"length"] forKey:@"length"];

        //get the speaker value;
        [newSession setValue:[self setupSpeaker:[session valueForKey:@"speaker"]] forKey:@"speaker"];
        NSLog(@"now doing title");
        //now get the title value;
        [newSession setValue:[self setupTitle:[session valueForKey:@"title"]] forKey:@"title"];
        NSLog(@"I got back this title:%@", [newSession valueForKey:@"title"]);

        }   

        if (![self.managedObjectContext save:&error]) {
            NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
            abort();
}

下面是为关系找到合适的演讲者和标题实体的代码(我意识到这是非常多余的)

最后,下面是关于崩溃的日志:

2010-02-20 16:48:17.134 iconf[1438:207] now looking for: 1
    2010-02-20 16:48:17.136 iconf[1438:207] found 1
    2010-02-20 16:48:17.156 iconf[1438:207] I got back this title:<NSManagedObject: 0x3b11a10> (entity: Title; id: 0x3d4a3c0 <x-coredata://B76F62BD-AC82-4335-9013-7529C2471F9C/Title/p6> ; data: {
        id = 1;
        session =     (
            0x3d51640 <x-coredata:///Session/t2765697F-14C9-4282-A067-10A2413732B834>
        );
        title = "Bill Gates Speaks";
    })
    2010-02-20 16:48:17.158 iconf[1438:207] now doing title
    2010-02-20 16:48:17.158 iconf[1438:207] now looking for: 2
    2010-02-20 16:48:17.159 iconf[1438:207] found 2
    2010-02-20 16:48:17.161 iconf[1438:207] I got back this title:<NSManagedObject: 0x3b16fd0> (entity: Title; id: 0x3d4d7a0 <x-coredata://B76F62BD-AC82-4335-9013-7529C2471F9C/Title/p12> ; data: {
        id = 2;
        session =     (
            0x3b1b320 <x-coredata:///Session/t2765697F-14C9-4282-A067-10A2413732B835>
        );
        title = "Lecture on Frogs";
    })
    2010-02-20 16:48:17.161 iconf[1438:207] *** -[NSManagedObject compare:]: unrecognized selector sent to instance 0x3b11a10
    2010-02-20 16:48:17.162 iconf[1438:207] Serious application error.  Exception was caught during Core Data change processing: *** -[NSManagedObject compare:]: unrecognized selector sent to instance 0x3b11a10 with userInfo (null)
    2010-02-20 16:48:17.163 iconf[1438:207] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[NSManagedObject compare:]: unrecognized selector sent to instance 0x3b11a10'
    2010-02-20 16:48:17.163 iconf[1438:207] Stack: (
2010-02-20 16:48:17.134 iconf[1438:207]正在寻找:1
2010-02-20 16:48:17.136 iconf[1438:207]发现1
2010-02-20 16:48:17.156 iconf[1438:207]我找回了这个标题:(实体:标题;id:0x3d4a3c0;数据:{
id=1;
会话=(
0x3d51640
);
title=“比尔·盖茨讲话”;
})
2010-02-20 16:48:17.158 iconf[1438:207]现在做标题
2010-02-20 16:48:17.158 iconf[1438:207]正在寻找:2
2010-02-20 16:48:17.159 iconf[1438:207]发现2
2010-02-20 16:48:17.161 iconf[1438:207]我找回了这个标题:(实体:标题;id:0x3d4d7a0;数据:{
id=2;
会话=(
0x3B120
);
title=“青蛙讲座”;
})
2010-02-20 16:48:17.161 iconf[1438:207]***-[NSManagedObject compare:]:发送到实例0x3b11a10的选择器无法识别
2010-02-20 16:48:17.162 iconf[1438:207]严重的应用程序错误。在核心数据更改处理过程中捕获异常:**-[NSManagedObject compare:::]:无法识别的选择器已发送到实例0x3b11a10,其中包含userInfo(null)
2010-02-20 16:48:17.163 iconf[1438:207]***由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“***-[NSManagedObject compare::]:未识别的选择器发送到实例0x3B11A110”
2010-02-20 16:48:17.163 iconf[1438:207]堆栈:(

听起来您的数据模型(应该)是这样的:

演讲者>会话
标题>会话

其中演讲者和标题都与会话有一对多的关系

基于此:

我使用一个整数键来设置每个 关系

还有你的代码,看起来你是在手动管理关系。你为什么要这样做?!这很复杂而且不必要。在你的核心数据模型中设置并使用真实的关系


另外,不要将“id”用作属性名称,因为它是objective-C中的关键字。

谢谢,下面是数据模型的副本。您对基本布局的看法是正确的


我手动设置关系的原因是因为这是第一次通过程序,所以我从三个单独的plist(一个用于演讲者,一个用于标题,一个用于会话)开始加载数据。有更好的方法吗?我可能根本不了解核心数据,但似乎如果每次创建会话实体时我都创建了一个新的标题实体,那么标题与会话之间的关系将是一对一的,而不是我想要的一对多的关系。因此,我加入了id变量(我现在重命名了它,错误没有改变)作为第一次加载到核心数据的关键。之后,我当然会使用核心数据来管理所有这些。有更好的方法吗?

如果您可以设置调试器并找出它在哪一行崩溃,这将非常有帮助。如果您发布数据模型的图片,以便我们可以清楚地看到关系,这也会有所帮助。首先,你有两个SO用户吗?为什么?下一步,你不应该发布问题的附加内容作为答案。你可以编辑原始问题或创建新问题(如果合适)。你可以从plists进行初始加载,也可以在开发过程中进行初始加载,然后保存该数据库文件并将其添加到项目中。然后,在r在eleased app中,您可以将数据库文件从只读应用程序包复制到Documents目录中。请参阅,您不了解核心数据关系。您应该做的第一件事是为实体创建子类。然后,您可以通过作为对象属性的名称访问属性和关系。to many rel关系实际上是集合,因此您可以添加单个对象或一组对象,以及在Xcode中创建子类时为您提供的方法。是的,我对滥用堆栈溢出表示诚挚的歉意。我无意中匿名发布了我的第一篇帖子,因此当我发布带有附加详细信息的评论时,我无法发布co因为我的评分很低,所以我会像我自己一样。无论如何,我将来会做得更好。我只是找出了错误。在我发布的上面的代码中,我在“标题”上使用了一个fetchedResultsController来检查是否有任何结果。我摆脱了这个问题,我很乐意去做。再次感谢你的耐心
2010-02-20 16:48:17.134 iconf[1438:207] now looking for: 1
    2010-02-20 16:48:17.136 iconf[1438:207] found 1
    2010-02-20 16:48:17.156 iconf[1438:207] I got back this title:<NSManagedObject: 0x3b11a10> (entity: Title; id: 0x3d4a3c0 <x-coredata://B76F62BD-AC82-4335-9013-7529C2471F9C/Title/p6> ; data: {
        id = 1;
        session =     (
            0x3d51640 <x-coredata:///Session/t2765697F-14C9-4282-A067-10A2413732B834>
        );
        title = "Bill Gates Speaks";
    })
    2010-02-20 16:48:17.158 iconf[1438:207] now doing title
    2010-02-20 16:48:17.158 iconf[1438:207] now looking for: 2
    2010-02-20 16:48:17.159 iconf[1438:207] found 2
    2010-02-20 16:48:17.161 iconf[1438:207] I got back this title:<NSManagedObject: 0x3b16fd0> (entity: Title; id: 0x3d4d7a0 <x-coredata://B76F62BD-AC82-4335-9013-7529C2471F9C/Title/p12> ; data: {
        id = 2;
        session =     (
            0x3b1b320 <x-coredata:///Session/t2765697F-14C9-4282-A067-10A2413732B835>
        );
        title = "Lecture on Frogs";
    })
    2010-02-20 16:48:17.161 iconf[1438:207] *** -[NSManagedObject compare:]: unrecognized selector sent to instance 0x3b11a10
    2010-02-20 16:48:17.162 iconf[1438:207] Serious application error.  Exception was caught during Core Data change processing: *** -[NSManagedObject compare:]: unrecognized selector sent to instance 0x3b11a10 with userInfo (null)
    2010-02-20 16:48:17.163 iconf[1438:207] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[NSManagedObject compare:]: unrecognized selector sent to instance 0x3b11a10'
    2010-02-20 16:48:17.163 iconf[1438:207] Stack: (