0
#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.nameself.pin工作,但有人可以告诉这是否正确或为什么这样工作?等提前感谢您的帮助。

4

1 回答 1

4

你在初始化程序中写了这个:

name = iname;

由于您没有名为 的局部变量name,因此编译器会查找名为 的实例变量name,或者名为 的静态或全局变量name。您没有名为 的实例变量name,也没有静态或全局变量。您有一个名为 的属性name。要设置属性,您需要使用“点表示法”:

self.name = iname;

或者您需要发送setName:消息:

[self setName:iname];

这两个编译成完全相同的代码。

请注意,由于您的超类是NSManagedObject,我假设是在您的核心数据模型中定义的具有属性和Employee的实体。如果是这样,使用是正确的。如果这些不是您的模型中定义的属性,您可能应该使用(或省略两者并让编译器自动合成属性)。namepin@dynamic@synthesize@dynamic@synthesize

于 2013-06-20T05:07:00.733 回答