【问题标题】:CoreData misinterpreting object classCoreData 误解对象类
【发布时间】:2011-11-17 05:41:08
【问题描述】:

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

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

【问题讨论】:

  • 一些你实际保存的代码怎么样?
  • 是的,没有人能像代码一样真正解释这一点。
  • -[__NSDate intValue]:无法识别的选择器说明了一切。 NSDate 对象没有 intValue 函数。
  • 我的问题是:我找不到这个 NSDate 在哪里(因此核心数据需要 NSNumber )。 @Eimantas / Nayefc:我的代码没有什么花哨的,只是有很多类,所以我不能在这里复制它。你会在代码中搜索什么?
  • 你还认为你需要更多代码吗?

标签: iphone objective-c core-data


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

    • 我删除了该应用程序并重新安装了它(多次)。我仍然有同样的问题。
    【解决方案3】:

    您收到该错误是因为您在 NSDate 对象 [NSDate date] 上调用了方法 intValue。 如果您需要以日期为时间间隔做某事,则使用

    [[NSDate date] timeIntervalSince1970]
    

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

    NSDate *startDate = (...some start date);
    NSDate *endDate = (...some end date);
    
    NSTimeInterval intervalInSeconds = [endDate timeIntervalSinceDate:startDate];
    

    【讨论】:

    • 我没有尝试任何这些。我在我的模型中存储日期和数字,我认为这应该不是问题。我的问题是找到谁被称为 intValue,我知道在哪个对象上,但我不知道这个对象“在我的代码中”在哪里。您需要更多信息来帮助我吗?
    猜你喜欢
    • 2023-03-30
    • 2018-07-18
    • 1970-01-01
    • 2012-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-10
    • 2011-02-07
    相关资源
    最近更新 更多