|
From: | Nima Talebi |
Subject: | Re: [swarm-hackers] Still learning the framework... |
Date: | Tue, 17 Nov 2009 17:29:23 +1100 |
@interface HeatSpace:Grid2d {
HBSize size;
HeatbugsModel *model;
}
...and looking at Grid2d...
@interface Grid2d: Discrete2d <Grid2d>
{
BOOL overwriteWarnings;
}
...so far, so good.
Now what I don't get is this...
/Users/xerxes/devel/heatbugs/HeatbugsModel.m:127:0 /Users/xerxes/devel/heatbugs/HeatbugsModel.m:127: warning: 'HeatSpace' may not respond to '-setDiffusionConstant:'
/Users/xerxes/devel/heatbugs/HeatbugsModel.m:128:0 /Users/xerxes/devel/heatbugs/HeatbugsModel.m:128: warning: 'HeatSpace' may not respond to '-setEvaporationRate:'
...why not? HeatSpace is a Grid2d, which is a Diffuse2d, which offers those exact methods - what have I done that the inheritance is broken?
Note that the warning is real - and the code does crash - so it's not because I've used forward declarations and not #imported a header file or something silly like that.
I'm almost there though!
Just as a note - I had to set the display of both heatspace display, and heatbug displays to the 1 world (since I merged the Grid2d heatbugDisplay and Discrete2d heatSpaceDisplay into a single class based on our previous discussion.
heatSpaceDisplay = [Value2dDisplay createBegin:[self getZone]];
[heatSpaceDisplay setDiscrete2dToDisplay:[mainModel world]];
[heatSpaceDisplay setDisplayMappingM:DISP_MAP_M C:DISP_MAP_C]; //turn [0,32768) -> [0,64)
heatSpaceDisplay = [heatSpaceDisplay createEnd];
[heatSpaceDisplay updateDisplay];
heatbugDisplay = [Object2dDisplay createBegin:[self getZone]];
[heatbugDisplay setDiscrete2dToDisplay:[mainModel world]];
heatbugDisplay = [heatbugDisplay createEnd];
[heatbugDisplay updateDisplay];
...I'm not sure if that's going to cause a problem.
Nima
On Nov 16, 2009, at 7:32 PM, Nima Talebi wrote:
Hi All,This bit of code about to be presented is merely a proof-of-concept (POC) for myself in learning the framework, and specifically the memory zoning.What I have here, is an attempt to create a new "HeatbugsWorld", which hides details such as....* The fact that it "is-a" SwarmWhy?* it conforms to Grid2dSubclassing is your friend in object-oriented programming. HeatSpace is already a subclass of Grid2d, actually it is a subclass of Diffuse2d which is a subclass of Grid2d, so maybe you just want to enhance the HeatSpace class?...and adds a few utility methods, for example...@class HeatbugsModel;@protocol HeatbugsWorld- (HBLength)width;- (HBLength)height;- (HBSize)size;@end@interface HeatbugsWorld:Swarm <Grid2d> {HBSize size;}+ (id)createBegin:(id)aZone withModel:(HeatbugsModel *)m andSize:(HBSize)s;- (HBLength)width;- (HBLength)height;- (HBSize)size;@end@implementation HeatbugsWorld+ (id)createBegin:(id)z withModel:(HeatbugsModel *)m andSize:(HBSize)s {HeatbugsWorld *this = [Grid2d create:m setSizeX:(int)s.width Y:(int)s.height];/*! Now set up the grid used to represent agent position... */this->size = s;return self;}- (HBLength)width {return size.width;}- (HBLength)height {return size.height;}- (HBSize)size {return size;}@end
...however, that crashes on `[Grid2d create:m setSizeX:(int)s.width Y:(int)s.height];'. The stack & crashlog...2009-11-17 14:20:40.679 Heatbugs[1157:6807] +[HeatbugsModel allocIVars:]: unrecognized selector sent to class 0xa3b02009-11-17 14:20:40.680 Heatbugs[1157:6807] An uncaught exception was raised2009-11-17 14:20:40.680 Heatbugs[1157:6807] +[HeatbugsModel allocIVars:]: unrecognized selector sent to class 0xa3b02009-11-17 14:20:40.682 Heatbugs[1157:6807] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '+[HeatbugsModel allocIVars:]: unrecognized selector sent to class 0xa3b0'*** Call stack at first throw:(0 CoreFoundation 0x95a1358a __raiseError + 4101 libobjc.A.dylib 0x93460f49 objc_exception_throw + 562 CoreFoundation 0x95a5fa9b +[NSObject(NSObject) doesNotRecognizeSelector:] + 1873 CoreFoundation 0x959bb026 ___forwarding___ + 9504 CoreFoundation 0x959babf2 _CF_forwarding_prep_0 + 505 Swarm 0x000826bb +[Grid2d createBegin:] + 596 Swarm 0x00080b3c +[Discrete2d create:setSizeX:Y:] + 557 Swarm 0x0008267a +[Grid2d create:setSizeX:Y:] + 738 Heatbugs 0x00006e57 +[HeatbugsWorld createBegin:withModel:andSize:] + 559 Heatbugs 0x00003cf2 +[HeatbugsModel heatbugModelWithAZone:] + 33810 Swarm 0x0001e726 +[CreateDrop_s create:] + 4111 Heatbugs 0x00003221 -[HeatbugsGUI buildObjects] + 14512 Swarm 0x000860e6 -[OpenStepSwarmController newSimulation:] + 21113 Foundation 0x98c90964 -[NSThread main] + 4514 Foundation 0x98c90914 __NSThread__main__ + 149915 libSystem.B.dylib 0x94800f39 _pthread_start + 34516 libSystem.B.dylib 0x94800dbe thread_start + 34)1. Scott - based on what you said regarding zones - quite correctly - even a [HeatbugsWorld alloc] would crash - so I've removed all such methods and functions, but now I need to find a way of encapsulating swarm-framework implementation details from the user-app - mostly just to make sure that I can do it - and that I have a good understanding of how it all works.Yep, don't do it. Use the +create methods like everybody else.2. I'm also a little confused with protocols and classes that share the same name - such as Grid2d - is that how things should be done? Is that good practice - should I be doing it? :)Don't say an object conforms to a protocol, like Grid2D unless it actually does, and your class doesn't. If you want to add functionality then you should subclass Grid2D, that's what subclassing is for...
3. Finally, notice that the [Grid2d create:setSizeX:Y:] takes no Zone info, could that be related to my problem? I did try [[Grid2d createBegin:z] ...] but had no luck there either.That means it uses the default global zone. You really don't need to get involved in using zones, just let the framework use the default._______________________________________________4. Sorry for the unlimited supply of newb-spam.
Nima
swarm-hackers mailing list
address@hidden
http://lists.nongnu.org/mailman/listinfo/swarm-hackers
_______________________________________________
swarm-hackers mailing list
address@hidden
http://lists.nongnu.org/mailman/listinfo/swarm-hackers
[Prev in Thread] | Current Thread | [Next in Thread] |