2010-06-24 32 views
2

我得到這一行的錯誤「無效的接收器類型‘NSInteger的’」我在執行一個簡單的類:無效的接收器類型「NSInteger的」時設置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; 
} 

回答

1

不,默認assign是你想要的。

坦率地說,這個錯誤對我來說沒有意義 - 代碼中是否還有別的東西,比如明確實現了setPrice?與此同時,抓住吸管,嘗試通過self在這個初始化程序中省略通路。

(在所有四個這些任務的,實際上,您使用的是copy直接訪問實例變量是一致的。如果你使用的是copy二傳手,你不需要copy參數搶先,而且做起來的你在這裏做 - 沒有相應的release - 會給你泄漏。堅持一種或另一種方式。)

+0

謝謝。我認爲代碼的另一部分出現了問題(雖然肯定沒有明確實現任何setter)。順便說一下,對於未來的讀者:不要*刪除'自我'和'複製'(例如「名稱= n」;做「self.name = n」或「name = [n copy]」,最好前者)。在嘗試訪問這些字符串時,我最終在嘗試各種建議時最終刪除了這兩個建議,並以EXC_BAD_ACCESS結尾。 – unsorted 2010-06-25 07:26:34

1

沒有,價格應該不會被指定爲(copy)copyretain僅用於對象,而非NSInteger等原始值。

順便說一下,您已指定(copy)作爲名稱和類別屬性的屬性,但是您在賦值時再次複製它們,這是多餘的。爲屬性指定(copy)意味着,只要您將該屬性設置爲新值,就會自動調用copy

+0

不只是多餘的,也泄漏! – walkytalky 2010-06-24 16:53:31