1

下一个菜鸟问题是……我必须在我的视图中画出很多文本,并认为编写一种更容易的方法是个好主意。这段代码在我看来:

- (void)drawText: (NSString*) tdString : (NSString*) schrift : (unsigned char) r : (unsigned char) g : (unsigned char) b :
                (int) tsize : (int) xpos : (int) ypos;
{
NSPoint textPoint = NSMakePoint(xpos, ypos);
NSMutableDictionary *textAttrib = [[NSMutableDictionary alloc] init];
[textAttrib setObject:[NSFont fontWithName:schrift size:tsize] forKey:NSFontAttributeName];
[textAttrib setObject:[NSColor colorWithCalibratedRed:(r/255.0f) green:(g/255.0f) blue:(b/255.0f) alpha:1.0]forKey:NSForegroundColorAttributeName];
[tdString drawAtPoint:textPoint withAttributes:textAttrib];
}

- (void)drawBPM
{
NSString *bpmString = [NSString stringWithFormat:@"%d", bpm];
NSString *tbpmString = [NSString stringWithFormat:@"%d", mbpm];

if (bpm < 100){             drawText(bpmString,@"Helvetica Light", 140, 140, 140, 36, 100, 100);
}
if (bpm > 99 && bpm < 110){ drawText(bpmString,@"Helvetica Light", 140, 140, 140, 36, 100, 100);
}
if (bpm > 109 && bpm < 200){drawText(bpmString,@"Helvetica Light", 140, 140, 140, 36, 100, 100);
}
if (bpm > 199){             drawText(bpmString,@"Helvetica Light", 140, 140, 140, 36, 100, 100);
}
}

在编辑器中,我收到警告“函数 'drawText' 的隐式声明在 C99 中无效”。运行时出现错误:“未找到架构 x86_64 链接器命令的符号失败,退出代码为 1”。很明显,这必须在之前问过,但我就是想不通。谢谢!

4

1 回答 1

1

警告“函数 'drawText' 的隐式声明在 C99 中无效”是因为您尚未在@interface.

您还错误地定义了该方法,它应该是(换行符可选,但一个好主意):

- (void)drawText:(NSString*)tdString
         schrift:(NSString*)schrift
               r:(unsigned char)r
               g:(unsigned char)g
               b:(unsigned char)b
           tsize:(int)tsize
            xpos:(int)xpos
            ypos:(int)ypos;

(请注意,您应该使用CGFloat颜色和位置而不是整数)。

然后它需要作为一个Objective-C方法调用,而不是一个C方法:

[self drawText:bpmString
       schrift:@"Helvetica Light"
             r:140
             g:140
             b:140
         tsize:36
          xpos:100
          ypos:100];

最后,您是从内部调用这些方法,[NSView drawRect:]不是吗?

于 2013-02-23T10:56:19.023 回答