2013-09-05 2 views
1

Objective c에서 완전한 초보자이며 "iOS 프로그래밍 : The Big Nerd Ranch 가이드"라는 책에서 도전을 완료하려고합니다. 내가 객체를 넣어려고[object]의 [object]에 대한 @interface가 선택자를 선언합니다. [method]

항목을라는있는 NSMutableArray로 (클래스 BNRItem의) 객체의 일부 클래스 BNRContainer의 용기을 (라고 하위 항목, BNRItem의 하위 클래스라고 BNRItem을 유지하기위한 NSMutableArray 추가). BNRItem은 정상적으로 작동합니다.

BNRContainer.h

#import <Foundation/Foundation.h> 
#import "BNRItem.h" 

@interface BNRContainer : BNRItem 
{ 
NSMutableArray *subItems; 
} 

BNRContainer.m

- (id)init 
{ 
return [self initWithItemName:@"Container" 
       valueInDollars:0 
       serialNumber:@""]; 
} 

- (void)setSubItems:(BNRItem*)item 
{ 
[subItems addObject:item]; 
} 

Main.m

#import <Foundation/Foundation.h> 
#import "BNRItem.h" 
#import "BNRContainer.h" 

int main(int argc, const char * argv[]) 
{ 

@autoreleasepool { 

    BNRItem *item = [[BNRItem alloc] init]; 

    BNRContainer *container = [[BNRContainer alloc] init]; 

    [container setSubItems:item] 

    } 

return 0; 
} 

을 줄 [CO에서 다음과 같이

코드는 의 ntainer setSubItems : (다른 세터 할 수 있지만, 그리고 잘 작동) 컨테이너 눈에 띄는 @interface이 완료 코드를하지 않는 선택 setSubItems

setter 메소드의 setSubItems를 선언하지 : 항목]가 나는 오류가 발생합니다.

나는 간단한 일을 잘못하고 있습니까? 간단한 설명은 매우 감사하겠습니다!

답변

1

업데이트 BNRContainer.h : (. 몰라 프레드가 삭제 된 이유는 그의 대답)

#import <Foundation/Foundation.h> 
#import "BNRItem.h" 

@interface BNRContainer : BNRItem 
{ 
    NSMutableArray *subItems; 
} 
- (void)setSubItems:(BNRItem*)item; 
@end 

+0

나는 (프레드) 그의 질문에 약간의 오독이있을 수 있다고 생각한다. 당신의 대답은 문제를 완벽하게 해결합니다. 나는 방금 무언가를 간단히 살펴 보았습니다. (.h 파일에서 선언했습니다.) 정말 고맙습니다! –

1

Xcode가 subItems에 대한 getters/setter를 생성하려면 실제로 인터페이스에서 해당 속성을 선언해야합니다. 이런 식으로 뭔가 :

#import <Foundation/Foundation.h> 
#import "BNRItem.h" 

@interface BNRContainer : BNRItem 
@property (strong, nonatomic) NSMutableArray *subItems; 
@end 

또한, 당신이없는 지금 실제로 ALLOC/배열 및 setSubItems의 현재 논리를 INITING : 그것은 할 것 같은 소리가 나는 무엇을하지 않습니다. 이 함수는 매개 변수로 전달 된 배열을 SubItems 내의 객체로 추가합니다. 당신이 하위 항목을 배열에서 항목을 추가하려는 경우, 당신은 사용해야합니다 :

[myMutableArray addObjectsFromArray:<#(NSArray *)#>]; 
+1

명시 적으로 '@synthesize subItems = subItems' 속성을 사용하지 않으면 ivar이 사용되지 않습니다. ivar를 완전히 제거하는 것이 더 좋다. – Sebastian

+0

사실, 그가해야하는 일은 그의 .h에서 setSubItems를 선언하는 것이다. '@ propery'를 전혀 사용할 필요가 없습니다. –

+0

그래, 왜 프레드가 그의 지위를 삭제했는지 모르겠다. –

관련 문제