Задача рисования в пользовательском классе UIView - PullRequest
0 голосов
/ 03 февраля 2010

У меня есть подкласс UIView, который имеет следующее в drawRect:

for(int j=0; j<[myArray count]; j++){
    if([myArray objectAtIndex:j]!=@""){    
        [[UIColor colorWithRed:0.9 green:0.9 blue:0.9 alpha:1] set];
        CGContextFillRect(context, CGRectMake(55+(20*j),10,15,5));
        [[UIColor blackColor] set];
        [[myArray objectAtIndex:j] drawAtPoint:CGPointMake(55+(20*j),3+) withFont:myFont];
    }
}

Я вошел в оператор if, и он работает, но по какой-то причине я все еще получаю CGContextFillRects на каждой итерации цикла, даже когда мой текущий объект массива равен @ "".

Я довольно новичок в рисовании, поэтому, пожалуйста, извините, если мне не хватает чего-то огромного и тривиального.

Ответы [ 2 ]

3 голосов
/ 03 февраля 2010

Вы не можете проверить на равенство с == или! = При использовании объектов; вам нужно использовать -isEqualTo :. Например:

for(int j=0; j<[myArray count]; j++){
    if(![[myArray objectAtIndex:j] isEqualTo: @""]){    
        [[UIColor colorWithRed:0.9 green:0.9 blue:0.9 alpha:1] set];
        CGContextFillRect(context, CGRectMake(55+(20*j),10,15,5));
        [[UIColor blackColor] set];
        [[myArray objectAtIndex:j] drawAtPoint:CGPointMake(55+(20*j),3+) withFont:myFont];
    }
}

Каждый объект в вашем массиве является указателем на память. Даже если два объекта имеют одинаковое логическое содержимое (например, пустую строку), они, скорее всего, указывают на разные куски памяти. То, что вы хотите сделать, это сравнить содержимое этих блоков памяти, что -isEqualTo: делает.

1 голос
/ 03 февраля 2010

if (![[myArray objectAtIndex:j] isEqualToString:@""]) {

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