проблема компиляции на устройстве, а не на симуляторе - PullRequest
0 голосов
/ 05 августа 2011

И какой-то рефакторинг (написание базового класса для двух разных классов + несколько других вещей), мой проект не смог скомпилироваться на ipad, не работает нормально на симуляторе

/Users/.../PaintViewController.m:50: error: 'width' undeclared (first use in this function)
/Users/.../PaintViewController.m:59: error: 'backgroundView' undeclared (first use in this function)

Конечно, эти переменныеобъявлен (в новом базовом классе), а 2 класса наследуются от базового класса

есть идеи почему?Я также импортировал базовый класс.

класс, в котором происходят ошибки:

#import "PaintViewControllerBase.h"

@class PopupSaveDrawingController;


@interface PaintViewController : PaintViewControllerBase
{

MenuBarViewController       *menuBarView;

bool                        bBarIsOpened;    
bool                        bIsClosing;
bool                        bIsOpening;
float                       fBarY;

NSTimer                     *toggleTimer;

NSArray                     *toolBrushImgArray;// liste des textures de brosses    

PopupSaveDrawingController  *popupSaveDrawning;

}

базовый класс:

@interface PaintViewControllerBase : UIViewController
{
// Handle Move              ///
CGPoint                     location;
CGPoint                     previousLocation;
BOOL                        firstTouch;

// Size                     ///
NSInteger                   width;
NSInteger                   height;

// Actions

UndoRedoManager             *undoManager;

toolType                    currentToolType;

// Brush
PaintBrush                  *brush;
PaintImage                  *image;

// image buffer             //////
NSMutableData               *data;

// GUI
PaintCanvas                 *backgroundView;
PaintCanvas                 *modeleView;
PaintCanvas                 *drawView;


}

оператор, который не удалось скомпилировать:

    width       = [PaintMenuViewController width]; // error here on ipad target only
    height      = [PaintMenuViewController height];// error here on ipad target only
    CGRect rect = CGRectMake(0,0,width,height);
    self.view   = [[UIView alloc] initWithFrame:rect];


    /**********************
     * IMAGEVIEW BACKGROUND
     **********************/
    backgroundView = [[PaintCanvas alloc] initWithFrame:rect]; // error here on ipad target only

проблема исчезнет, ​​если я добавлю self перед каждой переменной, например: self.width = 1024, но я бы предпочел не делать этого (есть много вещей, которые нужно изменить)

1 Ответ

0 голосов
/ 05 августа 2011

EDIT:

из вашего последнего комментария кажется, что вам не хватает определения этих переменных в первую очередь:

NSInteger width       = [PaintMenuViewController width];
...

Если это не правильно, добавьте больше контекста в ваш код, иначе это будет невозможно понять ...

СТАРЫЙ ОТВЕТ:

В заявлениях:

width       = [PaintMenuViewController width]; // error here on ipad target only
height      = [PaintMenuViewController height];// error here on ipad target only

вы пытаетесь получить доступ к иврам неправильно.

Вы должны выделить и инициализировать класс, прежде чем сможете получить доступ к его иварам (переменным-членам).

Не ясно, откуда этот код (из какого класса / метода я имею в виду). Если он находится в одном из контроллеров представления, вы просто делаете:

width       = [self width]; 
height      = [self height];

в противном случае, пожалуйста, укажите контекст кода (класс / метод).

Если вам нужны методы класса (т. Е. Методы, которые вы можете вызывать для самого класса перед их выделением), вы можете определить:

 @interface PaintViewControllerBase : UIViewController {
 }
 +(NSInteger)width;
 +(NSInteger)height;
 ...
 @end

эти методы могут возвращать нужные вам значения.

...