发送到 Core Data 的无法识别的选择器导致应用程序崩溃

Posted

技术标签:

【中文标题】发送到 Core Data 的无法识别的选择器导致应用程序崩溃【英文标题】:Unrecognized selector sent to Core Data causes app crash 【发布时间】:2013-01-01 16:01:03 【问题描述】:

我有一个 iPad 应用程序,使用 XCode 4.5、Storyboards、ios 6 和 MagicalRecord。此代码导致错误,我不明白为什么。 aApptStartselectedStartDate 都定义为 DateTime。那么,是什么原因造成的呢?

这是有问题的代码:

- (IBAction)saveAppointment:(UIButton *)sender 

    NSManagedObjectContext *localContext = [NSManagedObjectContext MR_contextForCurrentThread];
    AppointmentInfo *newAppointment = [AppointmentInfo createEntity];  //  create the entity

    NSLog(@"Selected start Date (save): %@", [self formatSelectedDate: selectedStartDate]); 

    newAppointment.aApptStart = selectedStartDate;  //  <------  causing the error
    newAppointment.aApptEnd= selectedEndDate;
    newAppointment.aTech = selectedTech;

    [localContext MR_saveNestedContexts];

这是我得到的错误:

由于未捕获的异常而终止应用程序 'NSInvalidArgumentException',原因:'-[NSManagedObject setAApptStart:]: 无法识别的选择器发送到实例 0xee85dd0'

【问题讨论】:

【参考方案1】:

那么,是什么原因造成的呢?

错误表明 AppointmentInfo 中没有该名称的属性。

那么,您的 NSManagedObject 子类 (AppointmentInfo) 是否声明了属性 aApptStart?另外,您的实体是否存在相应的属性(如果该属性已实现@dynamically)?

我想它会......也许是一个错字? 能否展示 AppointmentInfo 的接口和实现?

【讨论】:

我正在重组我的答案,这有点乏味,因为我在我的 ipad 上。直到现在才看到你的评论。什么是 undeeded(这甚至是什么意思),什么不能编译?你的答案在哪里?没有更多细节很难给出具体答案。 “没有更多细节很难给出具体答案”>> 是的,因此这不是一个答案:) 马里奥...确实是错字...非常感谢...祝您和您的家人新年快乐... @Daij-Djan 这是一个答案,因为我的猜测是一个错字。我承认我并没有完全完成我的答案的格式化和结构化,但它回答了这个问题(“是什么导致了这个错误”。答案:未声明属性,以及 -guessed- 原因,一个错字)。你很快就会投反对票:)【参考方案2】:

显然您的[AppointmentInfo createEntity] 没有返回AppointmentInfo 类型的对象,但NSManagedObjectNSManagedObject 没有为setAApptStart 提供选择器,这意味着没有属性aApptStart 的设置器。

您的+(AppointmentInfo*) createEntity 到底长什么样?

【讨论】:

以上是关于发送到 Core Data 的无法识别的选择器导致应用程序崩溃的主要内容,如果未能解决你的问题,请参考以下文章

使用 Core Data 获取生成“无法识别的选择器错误”?

错误:无法识别的选择器发送到实例

目标c [__NSArrayM objectForKey:]:发送到实例的无法识别的选择器

[标签比较:]:无法识别的选择器发送到实例

iPhone:“无法识别的选择器已发送到实例”错误

iOS Cocoa NSArrayI 长度]:发送到实例的无法识别的选择器