设置NSInteger属性时,接收器类型“NSInteger”无效

时间:2010-06-24 16:03:01

标签: iphone cocoa-touch

在我的一个简单类的实现中,我在这一行收到错误“无效的接收器类型'NSInteger'”:

        self.price = p; // this line throws error

我应该将价格指定为copy吗?更多细节:

头文件:

@interface SafeItem : NSObject {
    NSString *name;
    NSInteger price;
    NSString *category;
    NSInteger itemid;
    BOOL hasImage;
}

@property (nonatomic,copy) NSString *name;
@property (nonatomic) NSInteger price;
@property (nonatomic,copy) NSString *category;
@property NSInteger itemid;
@property BOOL hasImage;

- (id)initWithName:(NSString*) n price:(NSInteger) p category:(NSString*) c; 

@end

实现:

@implementation SafeItem

@synthesize name, price, category, itemid, hasImage;

- (id)initWithName:(NSString*) n price:(NSInteger) p category:(NSString*) c {
    if(self=[super init]){
        self.itemid = [SafeItem getNextId];
        self.name = [n copy];
        self.price = p; // this line throws error
        self.category = [c copy];
    }
    return self;
}

2 个答案:

答案 0 :(得分:1)

不,价格不应指定为(copy)copyretain仅用于对象,而不是NSInteger等原始值。

顺便说一下,您已将(copy)指定为名称和类别属性的属性,但在分配时再次复制它们,这是多余的。为属性指定(copy)意味着只要您将该属性设置为新值,就会自动调用copy

答案 1 :(得分:1)

不,默认assign就是你想要的。

坦率地说,这个错误对我没有意义 - 代码中是否有其他内容,例如setPrice的显式实现?在此期间,抓住吸管,尝试在此初始化程序中通过self省略访问权限。

(实际上,在所有这四项作业中,您使用copy与直接访问ivars一致。如果您使用的是copy setter,则无需copy。 1}}这个论点是先发制人的,并且像你在这里一样做 - 没有相应的release - 会给你泄密。坚持这样或那样。)