核心数据:"receiver type for instance does not declare a method with selector..."



我试图将Xcode 3(iOS 4.3)项目转换为Xcode 4.2 (iOS 5)中的ARC,但是当我尝试预检查项目时,我得到了一堆不同的错误,我需要在继续之前修复。其中一个错误是以下消息:

*"receiver type ' assign ' for instance message '没有声明选择器'gradable'*,

其中Assignment是核心数据管理对象,gradable是属性…

这里是我得到错误的行:

if ([[[[assignment gradable]description]description] isEqualToString:@"true"]) {

这里是为了更好地理解:

for(int i = 0; i < [assignmentArrays count]; i++) {
        for (Assignment* assignment in [assignmentArrays objectAtIndex:i]) {
            if ([[[[assignment gradable]description]description] isEqualToString:@"true"]) {
                [[gradableAssignmentsArray objectAtIndex:i] addObject:assignment];
            }
        }
    }
[assignmentArrays release];

所以,如果我理解正确的话,我需要声明这个方法,这样我就可以在这里使用它…但作为一个核心数据对象,我对这个有点困惑…我做了一些研究,但没有找到任何相关的核心数据。: |

提前感谢!!:)

[assignment valueForKey:@"gradable"],如果它是一个NSManagedObject,你没有子类,应该使编译器更安静,但如果该对象没有一个键@"gradable",你将有一个运行时异常,将崩溃。(你也可以在子类上使用)
如果你已经创建了NSManagedObject的子类,并且想要使用valueForKey(因为字符串更容易出错)的其他东西,请在该子类中声明该属性,以便编译器可以找到它。在.m中,你不会在这种情况下使用@synthesis,但@dynamic关键字,这基本上是告诉编译器,我没有这个属性的实现,但在运行时你会有一个。那个将由Core Data提供。

最新更新