2012-02-06 6 views
2

나는이 같은 파일을 포함하고있는 클래스에 대한 액세스를 제공하지가져 오기 지시어는

bannerContentController = [[BannerPhoneContentController alloc] init]; 

나는 오류를 얻을 :

Use of undeclared identifier 'BannerPhoneContentController'; 

겉으로보기에는 내 가져 오기를 무시할 수있는 원인은 무엇입니까?

이것은 배너 콘텐츠 컨트롤러의 헤더입니다.

#import <UIKit/UIKit.h> 
#import <Foundation/Foundation.h> 

#import "BannerContentController.h" 

@interface BannerPhoneContentController : BannerContentController <UIScrollViewDelegate> 
{ 
    UIScrollView *scrollView; 
    UIPageControl *pageControl; 
    NSMutableArray *viewControllers; 

    // To be used when scrolls originate from the UIPageControl 
    BOOL pageControlUsed; 
} 

@property (nonatomic, retain) UIScrollView *scrollView; 
@property (nonatomic, retain) UIPageControl *pageControl; 

@property (nonatomic, retain) NSMutableArray *viewControllers; 

- (IBAction)changePage:(id)sender; 

@end 

편집 bannerContentController 유형 BannerContentController하지 BannerPhoneContentController이다. 후자는 전자의 하위 유형입니다. 이 정확한 코드가 다른 앱에서 잘 작동한다는 점은 주목할 가치가 있습니다. 코드 자체와는 아무 관련이 없습니다. 나는 혼란 스럽다.

수정 확인 문제가 있음 - 문제를 해결하는 방법이 확실하지 않습니다. 나는 전처리 된 파일을 생성하고이 포함되어있어 헤더 파일은 사실이이다 :

#import <UIKit/UIKit.h> 
#import <Foundation/Foundation.h> 

#import "ContentController.h" 

@interface PhoneContentController : ContentController <UIScrollViewDelegate> 
{ 
    UIScrollView *scrollView; 
    UIPageControl *pageControl; 
    NSMutableArray *viewControllers; 

    // To be used when scrolls originate from the UIPageControl 
    BOOL pageControlUsed; 
} 

@property (nonatomic, retain) UIScrollView *scrollView; 
@property (nonatomic, retain) UIPageControl *pageControl; 

@property (nonatomic, retain) NSMutableArray *viewControllers; 

- (IBAction)changePage:(id)sender; 

@end 

참고 차이 - 모든 '배너의가 누락되었습니다. 이것이 파일의 모양입니다. 그러나 나는 프로젝트의 파일이 내가 맨 위에 올린 파일인지 확인했다. 나는 해결책을 청소하고 다시 짓기를 시도했다. 이 문제를 어떻게 해결할 수 있으며 그 이유는 무엇입니까?

EDIT이 모든 것을 포함하는 파일은 코드 라이브러리의 일부입니다. 나는 이제 새로운 프로젝트를 만들고 코드 라이브러리를 가져 와서이 라이브러리에이 모든 것을 정확히 같은 방식으로 다시 포함했습니다. 작동합니다. 두 프로젝트를 살펴 보았고 문제의 코드는 동일합니다. 이것은 프로젝트 설정이어야합니까?

답변

1

나를 재귀 적 가져 오기와 같이 찾습니다. BannerContentController.h 수입품은 BannerPhoneContentController.h이고, BannerPhoneContentController.h 수입품은 BannerContentController.h입니다.

그런 경우 재귀 종속성을 해결해야합니다. 예 : 앞으로 선언문을 사용합니다.

+0

... 진짜 고통이 될 수 있습니다. 또한이 구조는 작동하는 다른 앱과 동일한 구조입니다. – SirYakalot

+0

새로운 xcode를 사용하는 경우 사전 처리 된 파일 ("제품"메뉴 항목 iirc) – Yuras

+0

을 검사 할 수 있습니다. BannerPhoneContentController 선언을 전달하면 의미 문제 : 'BannerContentController *'에 'BannerPhoneContentController *'유형에서 할당하지만 어떻게 할 수 있습니까? 이것은 BannerPhoneContentController가 BannerContentController에서 직접 상속 받았을 때입니까? – SirYakalot

0

은 .h에서 @class BannerPhoneContentController을 사용하고 #import "BannerPhoneContentController.h"에서 .m을 사용하면 같은 결과가 나타 납니까?

+0

받는 사람 - 'BannerPhoneContentController'수신기가 전달 클래스이며 해당 @interface가 존재하지 않을 수 있습니다. – SirYakalot

+0

.h 파일에서'# import'와'@ class'를 모두 사용하면 과거에 수신기 경고가 발생했습니다. – iNoob

+0

시맨틱 문제 : 호환되지 않는 유형 'BannerPhoneContentController'에서 'BannerContentController *'에 할당 * '하지만 BannerPhoneContentController가 BannerContentController에서 직접 상속하는 경우 어떻게 될 수 있습니까? – SirYakalot

0

유라 스 (Yuras)의 의견에 감사 드리며 전처리 된 코드를 생성하여 문제가 있음을 알게되었습니다. 코드의 이전 버전이 포함되었습니다.

더 유용한 이유는 무엇입니까? 증분 링크가 켜져있는 경우 XCode의 버그 일뿐입니다. 기본적으로 코드의 해당 비트가 변경되었을 때 사전 처리 된 파일의 부분 만 변경하여 시간을 절약 할 수 있습니다. 불행히도, 이것은 항상 올바르게 작동하지 않습니다.

해결 방법은 파일을 삭제하고, 빌드를 정리하고, 파생 데이터 (창/oraniser/프로젝트/프로젝트 이름/파생 데이터 삭제)를 삭제하고, xcode를 재시작하거나 (컴퓨터를 재시작하거나 창 밖으로 나가 새 것을 사십시오) 파일을 다시 가져 오십시오.

엑스 코드는 내가 실제로 앞으로 .H에 BannerContentController을 선언하고하는 .m에 BannerPhoneContentController 수입이

관련 문제