2010-06-24 1 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를 명시 적으로 구현 한 것은 아니지만). 그건 그렇고, 미래의 독자를 위해 : "self"와 "copy"(예 : "name = n"; "self.name = n"또는 "name = [n copy" 전자). 이 페이지에서 여러 가지 제안을 시도 할 때 둘 다 제거하고 나중에 문자열에 액세스하려고 할 때 EXC_BAD_ACCESS로 끝납니다. – unsorted

1

아니, 가격은 (copy)로 지정되어서는 안된다. copyretain은 개체에만 사용되며 NSInteger와 같은 기본 값은 사용되지 않습니다.

그런데 (copy)을 이름 및 카테고리 속성의 속성으로 지정했지만 할당시 다시 복사합니다. 이는 중복됩니다. 속성에 대해 (copy)을 지정하면 해당 속성을 새 값으로 설정할 때마다 copy이 자동으로 호출됩니다.

+0

누설되지도 않습니다. – walkytalky