Пытаясь создать Skat-Game, я столкнулся со следующей проблемой:
isBidding - это логическое значение g, программа находится в определенном состоянии,
[desk selected] - это метод, вызывающий возвращение текущего выбранного игрока,
chatStrings состоит из словарей, сохраняющих строки с игроком, который набрал, и что он набрал
- (void)drawRect:(NSRect)rect{
NSMutableDictionary * attributes = [NSMutableDictionary dictionary];
[attributes setObject:[NSFont fontWithName:playerFont size:playerFontSize] forKey:NSFontAttributeName];
[attributes setObject:playerFontColor forKey:NSForegroundColorAttributeName];
[[NSString stringWithFormat:@"Player %i",[desk selected] + 1] drawInRect:playerStringRect withAttributes:attributes];
if (isBidding){
[attributes setObject:[NSFont fontWithName:chatFont size:chatFontSize] forKey:NSFontAttributeName];
[attributes setObject:chatFontColor forKey:NSForegroundColorAttributeName];
int i;
for (i = 0; i < [chatStrings count]; i++, yProgress -= 20){
if (isBidding)
[[NSString stringWithFormat:@"Player %i bids: %@",
[[[chatStrings objectAtIndex:i]valueForKey:@"Player"]intValue],
[[chatStrings objectAtIndex:i]valueForKey:@"String"]],
drawAtPoint:NSMakePoint([self bounds].origin.x, yProgress) withAttributes:attributes];
else
[[NSString stringWithFormat:@"Player %i: %@",[[[chatStrings objectAtIndex:i] valueForKey:@"Player"]intValue],
[[chatStrings objectAtIndex:i]valueForKey:@"String"]]
drawAtPoint:NSMakePoint([self bounds].origin.x, yProgress) withAttributes:attributes];
}
}
if (isBidding)
[[NSString stringWithFormat:@"Player %i bids: %@",[desk selected] + 1, displayString]
drawAtPoint:NSMakePoint([self bounds].origin.x, yProgress) withAttributes:attributes];
else
[[NSString stringWithFormat:@"Player %i: %@",[desk selected] + 1, displayString]
drawAtPoint:NSMakePoint([self bounds].origin.x, yProgress) withAttributes:attributes];
yProgress = chatFontBegin;
}
Это часть, определяющая содержимое строки, строка добавляется методом [символы символов].
-(void)displayChatString:(NSString *)string{
displayString = [displayString stringByAppendingString:string];
[self setNeedsDisplay:YES];
}
Проблема, если есть это:
при вводе более двух букв представление отображает NSRectSet {{{471, 574}, {500, 192}}}
и не возвращает больше описания, когда я пытаюсь его распечатать.
затем я получаю сообщение EXC_BAD_ACCESS, хотя я не выпустил его (насколько я вижу), я также создал строку с помощью alloc и init, так что я не могу быть в пуле автоматического выпуска.
Я также пытался наблюдать за процессом, когда он меняется, с помощью отладчика, но я не смог найти ответственный код.
Как вы видите, я все еще новичок в Какао (и программировании в целом), поэтому я был бы очень рад, если бы кто-нибудь помог мне с этим.