gpt4 book ai didi

ios - 为什么编译器认为这个变量未声明?

转载 作者:行者123 更新时间:2023-11-28 19:09:21 25 4
gpt4 key购买 nike

#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

编译器说 name 和 pin 未在 .m 文件中声明。我究竟做错了什么?放置 self.nameself.pin 是可行的,但有人能告诉我这是否正确或为什么可行吗? ETC。预先感谢您的帮助。

最佳答案

你在初始化器中写了这个:

name = iname;

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

self.name = iname;

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

[self setName:iname];

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

请注意,由于您的父类(super class)是 NSManagedObject,我假设 Employee 是在您的 Core Data 模型中定义的实体,具有属性 name别针。如果是这样,使用 @dynamic 是正确的。如果这些不是您模型中定义的属性,您可能应该使用 @synthesize(或省略 @dynamic@synthesize 并让编译器自动合成属性)。

关于ios - 为什么编译器认为这个变量未声明?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17205633/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com