2012-01-29 11 views
4

저는 앱에서 꽤 큰 View Controller를 가지고 있으며 몇 가지 기능을 카테고리로 분리하여 정리하고 싶습니다. 나는 범주를 구현하는 방법에 최대 읽기 및 내 .H (범주가 StatsVC + TableViewDelegate라고합니다)로카테고리 Ivars를 인식하지 못합니다.

#import "StatsVC.h" 

@interface StatsVC (TableViewDelegate) 

@end 

. 내 Implemation은 다음과 같이 시작합니다

@implementation StatsVC (TableViewDelegate) 
범주에

몇 번, 내가 읽고와 가정이 허용되는 원래 군 수업의 인스턴스 변수입니다 변수에 액세스 만에 바르의 모든 사용 이런 일이 왜

'Use of undeclared identifier 'iVar'

아무도 알고 있나요 : 범주이 오류 메시지가?

감사합니다.

답변

5

분명히 범주의 메서드에서 인스턴스 변수에 액세스 할 수 있습니다. 카테고리는 클래스에 메소드를 추가합니다. 클래스 인터페이스에서 선언 된 메소드와 해당 클래스의 카테고리에서 선언 된 메소드 사이에는 런타임에 실제 차이가 없습니다. 좋은 대답을 얻으려면 코드를 더 많이 표시해야 할 것입니다. 지금, 내 상단이 추측은 다음과 같습니다 당신은 클래스 메소드가 아닌 인스턴스 메서드 대신 -+로 시작하는 즉 하나에서 인스턴스 변수에 액세스하려는

  1. .

  2. 당신이 ivars를 선언 한 방식에 문제가 있습니다.

+0

감사 Caleb, ivars는 속성으로 생성 된 다음 합성됩니다. Category에있는 메소드는 모두 tableViewDelegate 메소드입니다. 다음은 그 예입니다 : @property (nonatomic, strong) Session * selectedSession; 수업에서 그 선언이다. 범주에서는 다음과 같이 액세스합니다. - (NSInteger) numberOfSectionsInTableView : (UITableView *) tableView { return (2 + [[selectedSession pieceSession] count]); } –

+0

이 경우 ivars는 실제로 범주에서 선언되지 않습니다. 단지 .h 파일 만보고 ivars가 무엇인지 알 수있는 방법이 없습니다. 속성을 사용하기 때문에 직접 ivars에 액세스하는 대신 범주 메서드의 속성을 사용해야합니다. ivars에 직접 액세스하려면 클래스 인터페이스에서 직접 ivars에 액세스하십시오. – Caleb

+0

고마워 Caleb,이 트릭을 않았다. 아쉽게도 카테고리에서 선언하지 않고 합성 된 ivars에 액세스 할 수 없습니다. –

관련 문제