Несовместимый тип в Objective C Iphone SDK 4.0 - PullRequest
0 голосов
/ 03 ноября 2010

// CStroke.h #import

@interface CStroke : NSObject {
    CGFloat *startX;
    CGFloat *startY;
    CGFloat *endX;
    CGFloat *endY;
    BOOL *state;
}
@property CGFloat *startX;
@property CGFloat *startY;
@property CGFloat *endX;
@property CGFloat *endY;
@property BOOL *state;
-(void)setStroke: (CGFloat *)newStartX andStartY:(CGFloat *)newStartY andEndX:(CGFloat *)newEndX andEndY:(CGFloat *)newEndY;
@end

После настройки класса CStroke я собираюсь использовать его во ViewController для рисования чего-либо с помощью CGFloat

CGFloat *startX = (CGFloat *)[[self retrieveStartCoordinateOfStroke:k whichKindOfCoorXOrY:@"X"] integerValue];
        CGFloat *startY = (CGFloat *)[[self retrieveStartCoordinateOfStroke:k whichKindOfCoorXOrY:@"Y"] integerValue];
        CGFloat *endX = (CGFloat *)[[self retrieveEndCoordinateOfStroke:k whichKindOfCoordXOrY:@"X"] integerValue];
        CGFloat *endY = (CGFloat *)[[self retrieveEndCoordinateOfStroke:k whichKindOfCoordXOrY:@"Y"] integerValue];
        CStroke *stroke = [[CStroke alloc] init];
        [stroke setStroke:startX andStartY:startY andEndX:endX andEndY:endY];

Здесь я получил ошибку ... Я не могу понять, что случилось ... они оба типа CGFloat ... Любой ответ на этот вопрос? Ошибка является несовместимым типом для аргумента 2 в CGContextAddLineToPoint и несовместимым типом для аргумента 2 в CGContextMoveToPoint

CGContextMoveToPoint(UIGraphicsGetCurrentContext(), myStroke.startX, myStroke.startY);
CGContextAddLineToPoint(UIGraphicsGetCurrentContext(), [myStroke endX], [myStroke endY]);

Ответы [ 2 ]

2 голосов
/ 03 ноября 2010

Ваша проблема в том, что вы делаете свои координаты, указатели на CGFloat, а не CGFloat типов.Они не являются типами объектов.CGfloat в настоящее время , не полагайтесь на это в будущем просто псевдоним типа float, и функции, которые вы в конечном итоге передаете, ожидают скалярные значения, а не указатели.

На втором примечании получение текущего графического контекста - не дешевая операция.Сделай это один раз.То есть измените код так, чтобы он выглядел примерно так:

CGContextRef context = UIGraphicsGetCurrentContext();

// Now pass in context where you would normally pass in UIGraphicsGetCurrentContext()
1 голос
/ 03 ноября 2010

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

//CGFloat *startX; no need for it to be a pointer
CGFloat startX; // just a regular CGFloat is enough
//change all your variables to be CGFloats and not pointers to CGFloats
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...