Hi, On Dec 5, 2010, at 12:39 PM, Dennis Birch wrote:
> - (id)initWithFrame:(NSRect)frame { > self = [super initWithFrame:frame]; > if (self) { > // Initialization code here. > TileColumn *allColumns[boardDimension - 1]; The above declaration is wrong for what you're trying to accomplish. You want the array to have boardDimension elements, not boardDimension - 1 elements. > for (int i = 0; i < boardDimension; i++) > { > TileColumn *column = [[TileColumn alloc] init]; > allColumns[i] = column; On the last pass through this loop, when i == boardDimension - 1, you're writing past the end of the array. Since you've declared the array to have boardDimension - 1 elements, the largest valid index into it is boardDimension - 2. > } > > gameColumns = [NSArray arrayWithObjects:allColumns count: > boardDimension]; Here, NSArray will read past the end of allColumns. allColumns has been declared with boardDimension - 1 elements, but you're telling NSArray that it has boardDimension elements. > } > return self; > } > I've run into a showstopper with my first project on my own (i.e. not a > project from a book). I've created a custom View subclass, and when I try to > instantiate an array of another custom subclass, it completely fails to do > so, but doesn't produce any meaningful errors. I can see that it's failing in > the debugger because after stepping after the line "TileColumn > *allColumns[boardDimension - 1]", the array remains with a member count of -1. If you step after the line "TileColumn *allColumns[boardDimension - 1]", nothing has happened, yet. That's just a declaration. Or am I misunderstanding, and you mean you have stepped repeatedly after that line, through the loop? Also, what you mean "array remains with a member count of -1"? Which array? How are you assessing the member count? The allColumns array is a C array, which doesn't know its element count. The gameColumns array, which I assume is an instance variable of type NSArray*, is nil until you assign to it in the last statement before the return. After that assignment, it will be a pointer to an NSArray with boardDimension elements (or it will have failed with an exception if something is very wrong, like some element of allColumns is still nil). > In the for loop, the line "allColumns[i] = column;" doesn't produce any > errors but doesn't change the array. Doesn't change which array? allColumns? That's basically impossible. How are you determining this? Is there any chance that you're trying to debug a release build (or any build that has optimizations enabled)? An optimized build will be very confusing to debug. Finally, something to consider: there's nothing wrong with the technique you've used of populating a C array and then building an NSArray from that C array. However, you might consider creating an NSMutableArray that starts empty and then, during the for loop, each TileColumn is added to it. If you create the NSMutableArray with +arrayWithCapacity: or -initWithCapacity:, you'll even avoid reallocation as you add elements to the array. Cheers, Ken _______________________________________________ Cocoa-dev mailing list (Cocoa-dev@lists.apple.com) 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 arch...@mail-archive.com