Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/102.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 类别中的自定义NSManagedObject setter_Ios_Objective C_Cocoa Touch_Core Data_Nsmanagedobject - Fatal编程技术网

Ios 类别中的自定义NSManagedObject setter

Ios 类别中的自定义NSManagedObject setter,ios,objective-c,cocoa-touch,core-data,nsmanagedobject,Ios,Objective C,Cocoa Touch,Core Data,Nsmanagedobject,我已经将我的NSManagedObject的所有自定义逻辑放在一个类别中,以便在模型发生变化时可以从模型中重新生成标准类 我需要的一个这样的逻辑是对象属性之一上的自定义setter: - (void) setName:(NSString *)name { [self willChangeValueForKey:@"name"]; [self setPrimitiveValue:name forKey:@"name"]; [self didChangeValueForKey

我已经将我的NSManagedObject的所有自定义逻辑放在一个类别中,以便在模型发生变化时可以从模型中重新生成标准类

我需要的一个这样的逻辑是对象属性之一上的自定义setter:

- (void) setName:(NSString *)name
{
    [self willChangeValueForKey:@"name"];
    [self setPrimitiveValue:name forKey:@"name"];
    [self didChangeValueForKey:@"name"];
    NSLog(@"name was changed");//for example
}
我已将其置于类别中,在本例中为
Item+Custom.m

我的问题:

为什么每当我设置一个项目的名称时,导入项目+Custom.m就不是必需的?上面的log语句仍然激发

只是好奇,发送消息的类如何不需要知道类别,逻辑才能继续启动


以及(可能是另一个问题)如果我在同一对象的第二个类别中添加了相同的自定义setter,并使用不同的日志语句,会发生什么情况?

加载程序时,运行时会知道所有类别方法。因此,如果您声明一个
-[Item setName:][/code>方法,那么核心数据将不再在运行时创建此方法

您不需要导入任何内容,因为在Xcode生成的托管对象子类文件中,
name
已声明为
@dynamic
属性


如果两个类别声明相同的方法,或者如果类别中声明的方法的名称与原始类中的方法相同,则行为是未定义的,请参见“使用Objective-C编程”。加载程序时,运行时会知道所有类别方法。因此,如果您声明一个
-[Item setName:][/code>方法,那么核心数据将不再在运行时创建此方法

您不需要导入任何内容,因为在Xcode生成的托管对象子类文件中,
name
已声明为
@dynamic
属性


如果两个类别声明相同的方法,或者如果类别中声明的方法的名称与原始类中的方法相同,则行为未定义,请参见“使用Objective-C编程”中的.

您的类别是否在模型的
.h
文件中声明?否-假设您的意思是“它是否在核心数据生成的.h中声明”。您的类别是否在模型的
.h
文件中声明?否-假设您的意思是“它是否在核心数据生成的.h中声明”。