第一个Quartz 2D程序给出错误......这是什么错误?

时间:2011-03-13 13:52:18

标签: cocoa macos nsview quartz-2d

我正在尝试为MAC制作我的第一个Quartz 2D应用程序。我只有我的app委托和myView类,如下所示 -

mydrawAppDelegate.h -

#import <Cocoa/Cocoa.h>

@class myView;

@interface mydrawAppDelegate : NSObject <NSApplicationDelegate> {
NSWindow *window;

myView* view;
}

@property (assign) IBOutlet NSWindow *window;

@end

mydrawAppDelegate.m -

#import "mydrawAppDelegate.h"
#import "myView.h"

@implementation mydrawAppDelegate

@synthesize window;

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
// Insert code here to initialize your application 

view = [[myView alloc] initWithFrame:CGRectMake(0.0, 0.0, 300.0, 480.0) ];
[[self.window contentView] addSubview:view];
}   
@end

myView.h -

#import <Cocoa/Cocoa.h>
#import <Quartz/Quartz.h>
#import <AppKit/AppKit.h>

@interface myView : NSView {

}

@end

myView.m -

#import "myView.h"

@implementation myView

- (id)initWithFrame:(NSRect)frame {
self = [super initWithFrame:frame];
if (self) {
    // Initialization code here.

    NSLog(@"initwithframeeeeeee");
}
return self;
}

- (void)drawRect:(NSRect)dirtyRect {
  // Drawing code here.
NSLog(@"drawrect called");
CGContextRef context = [[NSGraphicsContext currentContext] graphicsPort];

CGContextSetLineWidth(context, 2.0);
CGContextSetStrokeColorWithColor(context, [NSColor redColor]);
CGContextMoveToPoint(context, 100.0f, 100.0f);
CGContextAddLineToPoint(context, 300.0f, 300.0f);
CGContextStrokePath(context);
}

@end

它构建但在运行时提供“EXC_BAD_ACCESS”。编译时警告:“从不兼容的指针类型传递'CGContextSetStrokeColorWithColor'的参数2”

此外,我没有使用任何nib文件。当我们使用石英绘制时是否使用nib文件? 请帮助。谢谢......

1 个答案:

答案 0 :(得分:0)

遇到了问题。 NSColor无法直接转换为CGColor。评论了这一行

     CGContextSetStrokeColorWithColor(context, [NSColor redColor]);

它工作正常。使用cgcreatecolor进一步将颜色更改为红色。 :)