我的iPhone核心数据应用程序第一次运行完美,但在此之后运行时崩溃

时间:2010-09-30 06:41:06

标签: iphone objective-c core-data

我的应用程序基于两个类:JamJamItem,每个类都有一个TableViewController来显示/添加项目。

该模型包含两个类的两个实体,它们之间存在可选的一对一关系。 JamItem有一个名称字段和一个价格字段。 Jam有一个数量字段。这两个实体有相应的NSManagedObject类。

这两个列表都基于表列表视图控制器,并在Apple站点上的Recipes示例中建模。 JamListTableViewController显示已添加到列表中的所有JamItem个实例。单击“添加”时,将创建JamItemListTableViewController的新实例并将其推送到导航堆栈。这会列出已创建的JamItem个实例。选择JamItem后,- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath方法会创建JamItem的实例,并通过委托将其传回JamListTableViewController。然后,这会创建Jam的新实例并将JamItem添加到其中,然后保存。

我可以在模拟器上运行时完美运行应用程序并使用干净的数据库第一次运行!

JamItemListTableViewController始终有效,我可以愉快地添加和删除列表中的“果酱项目”。但是,如果我停止应用并重新运行,然后尝试将新的JamItem添加到果酱列表(JamListTableViewController),则JamListTableViewController调用[jam.managedObjectContext save:&error]时会崩溃我得到下面的错误,我认为这是它试图按名称排序的地方。

NSFetchedResultsController中的JamItemListTableViewController配置为按名称排序。 NSFetchedResultsController中的JamItemListTableViewControllerJamItem.name订购

我希望这是有道理的,因为我已经把头发拉了几个星期,现在试图找到解决方案。我想我可能已经(或者没有)发布了一个对象,这导致JamItem列表标记它已被更新并开始尝试重新排序其列表。

< / p>

这是错误的转储:

2010-09-29 07:20:00.443 Jams[12451:207] Serious application error.  Exception was caught during Core Data change processing.  This is usually a bug within an observer of NSManagedObjectContextObjectsDidChangeNotification.  [<UINavigationItem 0x5b4dc30> valueForUndefinedKey:]: this class is not key value coding-compliant for the key name. with userInfo {
        NSTargetObjectUserInfoKey = "<UINavigationItem: 0x5b4dc30>";
        NSUnknownUserInfoKey = name;
    }
    2010-09-29 07:20:00.446 Jams[12451:207] *** Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<UINavigationItem 0x5b4dc30> valueForUndefinedKey:]: this class is not key value coding-compliant for the key name.'
    *** Call stack at first throw:
    (
        0   CoreFoundation                      0x02577919 __exceptionPreprocess + 185
        1   libobjc.A.dylib                     0x026c55de objc_exception_throw + 47
        2   CoreFoundation                      0x02577851 -[NSException raise] + 17
        3   Foundation                          0x000d96b1 -[NSObject(NSKeyValueCoding) valueForUndefinedKey:] + 279
        4   Foundation                          0x00040868 _NSGetUsingKeyValueGetter + 147
        5   Foundation                          0x0003fd2e -[NSObject(NSKeyValueCoding) valueForKey:] + 278
        6   Foundation                          0x00043535 -[NSObject(NSKeyValueCoding) valueForKeyPath:] + 381
        7   Foundation                          0x000f7c4f -[NSSortDescriptor compareObject:toObject:] + 128
        8   CoreData                            0x0237cb5e +[NSFetchedResultsController(PrivateMethods) _insertIndexForObject:inArray:lowIdx:highIdx:sortDescriptors:] + 286
        9   CoreData                            0x0237d1b2 -[NSFetchedResultsController(PrivateMethods) _postprocessInsertedObjects:] + 402
        10  CoreData                            0x023831bc -[NSFetchedResultsController(PrivateMethods) _managedObjectContextDidChange:] + 1804
        11  Foundation                          0x00035c1d _nsnote_callback + 145
        12  CoreFoundation                      0x0254fcf9 __CFXNotificationPost_old + 745
        13  CoreFoundation                      0x024cf11a _CFXNotificationPostNotification + 186
        14  Foundation                          0x0002b7c2 -[NSNotificationCenter postNotificationName:object:userInfo:] + 134
        15  CoreData                            0x022bf519 -[NSManagedObjectContext(_NSInternalNotificationHandling) _postObjectsDidChangeNotificationWithUserInfo:] + 89
        16  CoreData                            0x0232eb33 -[NSManagedObjectContext(_NSInternalChangeProcessing) _createAndPostChangeNotification:withDeletions:withUpdates:withRefreshes:] + 259
        17  CoreData                            0x022a1f78 -[NSManagedObjectContext(_NSInternalChangeProcessing) _processRecentChanges:] + 1352
        18  CoreData                            0x022dba15 -[NSManagedObjectContext save:] + 149
        19  JamsApp                             0x000064b3 -[JamsListTableViewController insertJamItem:] + 168
        20  JamsApp                             0x00006405 -[JamsListTableViewController selectedJamItem:] + 43
        21  JamsApp                             0x00003f41 -[JamItemListTableViewController tableView:didSelectRowAtIndexPath:] + 143
        22  UIKit                               0x0033d718 -[UITableView _selectRowAtIndexPath:animated:scrollPosition:notifyDelegate:] + 1140
        23  UIKit                               0x00333ffe -[UITableView _userSelectRowAtIndexPath:] + 219
        24  Foundation                          0x0004acea __NSFireDelayedPerform + 441
        25  CoreFoundation                      0x02558d43 __CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION__ + 19
        26  CoreFoundation                      0x0255a384 __CFRunLoopDoTimer + 1364
        27  CoreFoundation                      0x024b6d09 __CFRunLoopRun + 1817
        28  CoreFoundation                      0x024b6280 CFRunLoopRunSpecific + 208
        29  CoreFoundation                      0x024b61a1 CFRunLoopRunInMode + 97
        30  GraphicsServices                    0x02ddc2c8 GSEventRunModal + 217
        31  GraphicsServices                    0x02ddc38d GSEventRun + 115
        32  UIKit                               0x002d9b58 UIApplicationMain + 1160
        33  JamsApp                             0x00001c0c main + 102
        34  JamsApp                             0x00001b9d start + 53
    )
    terminate called after throwing an instance of 'NSException'

2 个答案:

答案 0 :(得分:1)

我要检查你的笔尖,看看你是否有名字的连接,名字不存在,但怀疑它会在第一次崩溃。重新检查您定义名称的所有位置。

答案 1 :(得分:0)

好的,所以我自己解决了。

我不完全确定发生了什么事,但在我看来,原来然后移除的字段似乎在核心数据中某处?

无论如何,我的修复方法是删除所有核心数据文件和托管对象文件,并在sim中删除应用程序实例,然后重新开始。

这需要几分钟才能解决问题 - 现在堵塞可以再次快乐地流动!

我宁愿解决这个问题,但是时间紧迫,我已经花了太多时间看着它!