2011-07-05 3 views
1

디버그에서 예상대로 빌드 및 실행하는 iOS 프로젝트가 있지만 릴리스 용으로 빌드 될 때 컴파일 오류가 발생합니다. 에러가 슈퍼에서 선언되는 아이바 함께 할이며 여기서 구체적수퍼 클래스/하위 클래스의 디버그/릴리스 빌드 차이점

'fetchedResultsController_' undeclared (First use in this function). 

인 수퍼 .H이다.

@interface Super : UIViewController <NSFetchedResultsControllerDelegate> { 
    NSFetchedResultsController* fetchedResultsController_; 
    NSManagedObjectContext* managedObjectContext_; 
} 

@property (nonatomic, retain) NSFetchedResultsController* fetchedResultsController; 
@property (nonatomic, retain) NSManagedObjectContext* managedObjectContext; 

@end 

과 서브 클래스 인터페이스가 이렇게 정의

@implementation Super 

@synthesize fetchedResultsController = fetchedResultsController_; 
@synthesize managedObjectContext = managedObjectContext_; 

#pragma mark - 
#pragma mark Properties 

-(NSFetchedResultsController*)fetchedResultsController { 
    return nil; 
} 

수퍼하는 .m : -

@interface Sub : Super <UIActionSheetDelegate, UIImagePickerControllerDelegate, UINavigationControllerDelegate> { 
    // extra stuff 
} 

서브 클래스하는 .m에서 내가

-(NSFetchedResultsController*)fetchedResultsController { 

    if (fetchedResultsController_ == nil) { // undeclared error here.... 
    //stuff 
    } 
    return fetchedResultsController_; 
fetchedResultsController

에 대한 게으른로드 기능을 구현

나는 혼란 스럽다. 왜냐하면 왜 이것이 디버그에서 일어날 지 이해할 수 없기 때문입니다. 사람이 문제가 무엇인지 식별 ​​할 수있는 경우

나는이 질문에 대한 대답없는 크게

답변

1

고맙겠지만 문제가 사라 할 것입니다.

Super 클래스의 인스턴스 변수는 모두 무의미합니다. 그리고 아마도 그것들을 사용하는 사람들이 fetchedResultController 속성 설정이 허용되지 않는다는 것을 알 수 있도록 속성 readOnly을 설정해야합니다. 일이 서서 사람들은 부동산을 설정하면 읽을 때 더 많은 것을 얻을 것이라고 합리적으로 기대합니다.

따라서 인스턴스 변수를 하위 클래스로 이동하십시오. 수퍼 클래스에서 readOnly 속성을 선언하고 서브 클래스에서 readWrite을 다시 선언하십시오.

+0

나는 그 것을 선상에 가져 갔고, 변경을 한 후에는 문제가 없어졌다. 그러나 나는 그 때 '이 초급 클래스가 필요한 것은 무엇입니까?'라고 생각했습니다. 방금 프로젝트에서 제거했습니다! – Damo

+0

@Damo : :-) .... – JeremyP

관련 문제