isn't this almost exactly the same question you asked a week ago? It looks like
you did 1/2 of what Graham told you then but didn't totally understand his
answer.
Same answer, you're setting path to a newly-created NSBezierPath you don't own
and overwriting the one you alloc/init'ed earlier. So you're leaking the first
one and the second one you don't own so it's being released causing the bad
access error.
this line by the way
path = [ path init ];
is illegal, you can't init something twice. The second version happens to work
(even apart from the illegal extra init) because it appends a path to the
bezier which already exists, which you then aren't leaking.
It might help to go read the creation/destruction of objects and memory
management chapters again until it clicks.
On 11-Mar-2010, at 9:38 PM, Billy Flatman wrote:
> Hi All,
>
> I'm getting a 'EXC_BAD_ACCESS' error when calling the fill on a NSBezierPath.
> Below is an outline of my code.
>
>
> @interface Shape : NSObject {
> NSBezierPath *path;
> }
> - (void)paint;
> @end
>
> @implementation Shape
> - (void) paint {
> [[NSColor redColor] set];
> [path fill];
> }
> @end
>
> @interface Square : Shape <Moveable> {}
> - (Square *) initSquare;
> - (void)initBezierPath;
> @end
>
> @implementation Square
> - (Square *) initSquare {
> self = [super init];
> if (self) {
> path = [[NSBezierPath alloc] init];
> [self initBezierPath];
> }
> return self;
> }
> - (void) initBezierPath {
> path = [NSBezierPath bezierPathWithRoundedRect:NSMakeRect(0,0,10,10)
> xRadius:5
> yRadius:5];
> [path closePath];
> }
> @end
>
> it works if I change initBezierPath content to:
>
> path = [path init];
> [path appendBezierPathWithRoundedRect:r
> xRadius:5
> yRadius:5];
> [path closePath];
>
> From the main body I initialise a Square and call it's paint method in the
> drawRect method of an NSView.
>
> Any help would be greatly appreciated.
>
> Billy Flatman
> [email protected]
>
>
> _______________________________________________
>
> Cocoa-dev mailing list ([email protected])
>
> Please do not post admin requests or moderator comments to the list.
> Contact the moderators at cocoa-dev-admins(at)lists.apple.com
>
> Help/Unsubscribe/Update your Subscription:
> http://lists.apple.com/mailman/options/cocoa-dev/rols%40rols.org
>
> This email sent to [email protected]
_______________________________________________
Cocoa-dev mailing list ([email protected])
Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com
Help/Unsubscribe/Update your Subscription:
http://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com
This email sent to [email protected]