Директива импорта, не предоставляющая доступ к классу - PullRequest
2 голосов
/ 06 февраля 2012

Я включаю такой файл:

#import "BannerPhoneContentController.h"

однако, когда я пытаюсь использовать это так:

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

обратите внимание на разницу - все баннеры отсутствуют. Это то, на что был похож файл. Тем не менее, я проверил, и файл, который находится в проекте, является тем, который я разместил вверху. Я попытался очистить раствор и построить снова. Как я могу это исправить и почему это произошло?

РЕДАКТИРОВАТЬ Файл, в который я включаю все это, является частью библиотеки кода. Теперь я создал новый проект, импортировал библиотеку кода и снова включил все это в эту библиотеку точно таким же образом. и это работает. Я просмотрел два проекта, и рассматриваемый код идентичен. Это должна быть настройка проекта?

Ответы [ 3 ]

1 голос
/ 06 февраля 2012

Это выглядит как рекурсивный импорт.Скажем, BannerContentController.h импортирует BannerPhoneContentController.h и BannerPhoneContentController.h импортирует BannerContentController.h.

Если это так, то вам следует разрешить рекурсивные зависимости.Например, используя предварительную декларацию.

0 голосов
/ 07 февраля 2012

После долгих раздумий и благодаря комментарию от Yuras я сгенерировал предварительно обработанный код и понял, что проблема заключалась в том, что в него была включена старая версия кода.

Более полезным является ПОЧЕМУ.Это просто ошибка в XCode, которая иногда случается, когда включено инкрементное связывание - в основном это то, где время экономится, изменяя только части предварительно обработанного файла, когда соответствующие биты вашего кода были изменены.К сожалению, это не всегда работает правильно.

Решение, к сожалению, заключалось в том, чтобы удалить файлы, очистить сборку, удалить производные данные (окна / oraniser / projects / project name / delete производные данные), перезапустить xcode (возможно, также перезагрузить компьютер иливыбросьте его из окна и купите новый), а затем повторно импортируйте файлы.

XCode может быть настоящей болью ...

0 голосов
/ 06 февраля 2012

дает ли @class BannerPhoneContentController в .h и #import "BannerPhoneContentController.h" в .m одинаковый результат?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...