#import <Foundation/Foundation.h>
#import <CoreData/CoreData.h>
@interface Employee : NSManagedObject
@property (nonatomic, retain) NSString* name;
@property (nonatomic, retain) NSNumber* pin;
-(id) initWithName:(NSString*)name Pin:(NSNumber*)pin;
@end
@implementation Employee
@dynamic name;
@dynamic pin;
-(id) initWithName:(NSString*)iname Pin:(NSNumber*)ipin{
self = [super init];
if(self){
name = iname;
pin = ipin;
}
return self;
}
@end
编译器说.m文件中的名称和引脚未声明。我究竟做错了什么?
将self.name
和self.pin
设置为有效,但有人可以判断这是否正确或者为什么会这样?等等
提前感谢您的帮助。
答案 0 :(得分:4)
您是在初始化程序中写的:
name = iname;
由于您没有名为name
的局部变量,编译器会查找名为name
的实例变量,或名为name
的静态或全局变量。您没有名为name
的实例变量,也没有静态或全局变量。您有一个名为name
的属性。要设置属性,您需要使用“点表示法”:
self.name = iname;
或者您需要发送setName:
消息:
[self setName:iname];
这两个编译完全相同的代码。
请注意,由于您的超类是NSManagedObject
,我认为Employee
是您的核心数据模型中定义的具有属性name
和pin
的实体。如果是这样,使用@dynamic
是正确的。如果这些不是模型中定义的属性,那么您可能应该使用@synthesize
(或省略@dynamic
和@synthesize
并让编译器自动合成属性。