2013-02-23 33 views
1

接下来的问题是......我必须在视图中绘制大量文本,并认为编写一个更简单的方法是个不错的主意。此代码是在我的观点:调用在NSView中绘制文本的方法时出现错误

- (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失败。”。很明显,这个问题以前必须提出,但我无法弄清楚。谢谢!

回答

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:]这些方法不是吗?

+0

好吧,我还有其他方法也没有宣布,他们的工作,是因为参数?是的,我从内部调用这些方法[NSView drawRect:] – fw2601 2013-02-23 11:08:41

+0

@ fw2601是的,实际上我认为这个警告是因为你正在调用方法,就好像它是一个没有声明的C方法。执行我提到的修复,因为你应该没问题。 – trojanfoe 2013-02-23 11:18:10

+0

我做了,它的工作原理!谢谢! – fw2601 2013-02-23 11:21:39

相关问题