CoreData误解对象类

时间:2011-09-14 17:24:48

标签: iphone objective-c core-data

保存核心数据上下文时出现以下错误。 我真的不知道从哪里开始看,如果你有一个领先... 谢谢。

PS:我检查过.h文件中声明的所有类型都与我的数据模型中的相同。

编辑:我在一个NSDate类别中覆盖了intValue。现在我看到在NSNumber上调用timeIntervalSinceReferenceDate。我试图在那里放一个断点,但它没有提供任何信息(只保存:在我的代码之前)。我还发现了一种知道谁是那些着名对象的方法:NSDate是与NSNumber(称为sleep)在同一类中的对象(称为lastCompute)。它们的类型匹配.h和数据模型中声明的类型。但它没有给我一个提示,说明为什么CoreData在NSDate上调用intValue。任何铅?感谢

-[__NSDate intValue]: unrecognized selector sent to instance 0x6a3cba0
 *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSDate intValue]: unrecognized selector sent to instance 0x6a3cba0'
*** Call stack at first throw:
(
    0   CoreFoundation                      0x01ca35a9 __exceptionPreprocess + 185
    1   libobjc.A.dylib                     0x01df7313 objc_exception_throw + 44
    2   CoreFoundation                      0x01ca50bb -[NSObject(NSObject) doesNotRecognizeSelector:] + 187
    3   CoreFoundation                      0x01c14966 ___forwarding___ + 966
    4   CoreFoundation                      0x01c14522 _CF_forwarding_prep_0 + 50
    5   CoreData                            0x00955b50 -[NSSQLiteConnection execute] + 2320
    6   CoreData                            0x009a7ebd -[NSSQLiteConnection updateRow:] + 365
    7   CoreData                            0x009a6e64 -[NSSQLConnection performAdapterOperations:] + 180
    8   CoreData                            0x009a6b0e -[NSSQLCore _performChangesWithAdapterOps:] + 494
    9   CoreData                            0x009a55ea -[NSSQLCore performChanges] + 410
    10  CoreData                            0x0099f038 -[NSSQLCore saveChanges:] + 216
    11  CoreData                            0x0095d199 -[NSSQLCore executeRequest:withContext:error:] + 409
    12  CoreData                            0x00a0d70b -[NSPersistentStoreCoordinator executeRequest:withContext:error:] + 3691
    13  CoreData                            0x00995948 -[NSManagedObjectContext save:] + 712

3 个答案:

答案 0 :(得分:2)

您收到该错误是因为您在 NSDate 对象 [NSDate日期] 上调用 intValue 方法。 如果您需要以日期作为时间间隔,而不是使用

[[NSDate date] timeIntervalSince1970]

或者如果您需要比较两个日期,请执行以下操作:

NSDate *startDate = (...some start date);
NSDate *endDate = (...some end date);

NSTimeInterval intervalInSeconds = [endDate timeIntervalSinceDate:startDate];

答案 1 :(得分:1)

我想我解决了这个问题 我试图删除NSDate属性。出现了一个新错误(解释here)。所以我检查了所有[NSNumber numberWithSomething:],我发现我在数据模型中声明为float的属性中使用int创建的数字。 我修复了所有这些错误,重新添加了NSDate,现在我的应用程序不再崩溃了。我希望这是解决方案,即使它与在NSDate上调用intValue无关。

答案 2 :(得分:0)

由于您更改了属性并且您所期望的操作未正确执行,因此听起来您没有正确处理数据模型的版本化。

确保你清楚this。更好的是,如果您的应用程序尚未向公众或一组测试人员和QA人员发布,那么您可以从一个全新的数据库开始,而不必担心版本控制和迁移。

虽然从头开始是一个简单的方法,但如果您计划将来使用CoreData,您应该真正阅读并理解XCode 4中可用的版本控制思想和工具。