Lil*_*oke 18 objective-c nsmutablearray
我已经将NSMutableArray子类化如下:
基类:
@interface MyBaseMutableArray : NSMutableArray {
// Database variables
NSString * databaseName;
NSString * databasePath;
}
@property (nonatomic, retain) NSString * databasePath;
- (id)initWithContentsOfSQLiteDB:(NSString *)dbTable;
-(void) checkAndCreateDatabase;
-(void) readFromDatabase;
@end
Run Code Online (Sandbox Code Playgroud)
子类:
@interface IngredientsMutableArray : MyBaseMutableArray
{
}
-(void) readFromDatabase;
@end
Run Code Online (Sandbox Code Playgroud)
当我创建一个IngredientsMutableArray时,我执行以下操作:
IngredientsMutableArray * i = [[IngredientsMutableArray alloc]
initWithContentsOfSQLiteDB:@"MyIngredientsDB.sql"];
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试执行[self addObject:ingred]时,我抛出异常如下:
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[NSArray count]: method only defined for abstract class. Define -[IngredientsMutableArray count]!'
Run Code Online (Sandbox Code Playgroud)
我相信我没有正确初始化NSMutableArray.我打算给我们initWithCapaciity,但我不知道SQL调用之前的计数.我认为我忽略了一些显而易见的事情,但对于Objective CI来说,有些新手却有点迷茫.
任何帮助表示赞赏.
Ste*_*ton 25
覆盖的方法
NSMutableArray的方法在概念上基于这些原始方法:
Run Code Online (Sandbox Code Playgroud)insertObject:atIndex: removeObjectAtIndex: addObject: removeLastObject replaceObjectAtIndex:withObject:在子类中,您必须覆盖所有这些方法,尽管您可以仅使用前两个实现所需的功能(但这可能效率很低).您还必须覆盖NSArray类的基本方法.
但真正的答案是你真的不想成为它的子类.有两种选择:
NSArray成员变量的新类在这种情况下,我想我会选择第二种选择.
通常,您倾向于将系统类子类化为比C#或Java更少的子类.
| 归档时间: |
|
| 查看次数: |
7102 次 |
| 最近记录: |