我创建了一个“SDMutableGrid”类,以便我可以使用网格。它只是NSMutableArray的一个子元素,其中包含的数组数等于网格中的行数。Objective C中的继承问题C
目前,程序在它真正开始之前就退出了,看起来这是因为为NSMutableArray定义的方法在某种程度上不适用于SDMutableGrid,任何人都知道为什么?
这里是.H:
#import <Foundation/Foundation.h>
#import "SDDimensions.h"
@interface SDMutableGrid : NSMutableArray {
SDDimensions dimensions;
}
@property (nonatomic) SDDimensions dimensions;
- (id)initWithDimensions:(SDDimensions)newDimensions;
- (void)addObject:(id)anObject toRow:(NSUInteger)row;
@end
这里是.M:
#import "SDMutableGrid.h"
@implementation SDMutableGrid
@synthesize dimensions;
- (void)setDimensions:(SDDimensions)newDimensions {
if (newDimensions.width < dimensions.width) {
NSMutableArray *anArray;
NSRange aRange = NSMakeRange(newDimensions.width, dimensions.width - newDimensions.width);
for (NSUInteger i = 0; i < MIN(dimensions.height,newDimensions.height); i++) {
anArray = [self objectAtIndex:i];
[anArray removeObjectsInRange:aRange];
}
}
dimensions.width = newDimensions.width;
if (newDimensions.height > dimensions.height) {
for (NSUInteger i = dimensions.height; i < newDimensions.height; i++) {
[self addObject:[[NSMutableArray alloc] initWithCapacity:dimensions.width]];
}
} else if (newDimensions.height < dimensions.height) {
[self removeObjectsInRange:NSMakeRange(newDimensions.height, dimensions.height - newDimensions.height)];
}
dimensions.height = newDimensions.height;
}
- (id)initWithDimensions:(SDDimensions)newDimensions {
if (self = [super initWithCapacity:newDimensions.height]) {
NSMutableArray *anArray;
for (NSUInteger i = 0; i < newDimensions.height; i++) {
anArray = [[NSMutableArray alloc] initWithCapacity:newDimensions.width];
NSLog(@"Got this far");
[self addObject:anArray];
NSLog(@"woot");
[anArray release];
}
NSLog(@"Finished Initializing grid");
}
return self;
}
- (void)addObject:(id)anObject toRow:(NSUInteger)row {
[[self objectAtIndex:row] addObject:anObject];
}
@end
,这里是什么出现在控制台上:
2009-08-12 15:27:02.076 Flipswitch [1756:20b] 由于未捕获异常'NSInvalidArgumentException'而终止应用程序,原因:' - [NSMutableArray initWithCapacity:]:仅为抽象类定义的方法。定义 - [SDMutableGrid initWithCapacity:]!' 2009-08-12 15:27:02.080 Flipswitch [1756:20B]堆栈:( 807902715, 2536648251, 808283725, 808264737, 13690, 11018, 10185, 814713539, 814750709, 814739251, 814722434, 814748641, 839148405, 807687520, 807683624, 814715661, 814752238, 10052,)
+1我想补充说,将NSArray包装在NSObject子类中的第一个例子叫做**组合类** – 2010-11-15 01:49:17