“ - [NSArray的数]只为抽象类定义为”使用一个NSArray子类
我有一个NSArray
子拿着,我要排序的对象时例外,但我得到一个异常与消息“ - [NSArray的数]只为抽象类定义为”使用一个NSArray子类
*由于未捕获的异常'NSInvalidArgumentException'而终止应用程序,原因:'* - [NSArray count]:仅为抽象类定义的方法。定义 - [CharacterArray count]!'
我已经尝试了下面的两种方式来做到这一点,但两次都得到了上述错误。
[characters sortUsingDescriptors:@[[NSSortDescriptor sortDescriptorWithKey:@"strength" ascending:YES]]];
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"strength" ascending:YES];
[characters sortUsingDescriptors:[NSArray arrayWithObject:sortDescriptor]];
我尝试了一些其他的方式来做到这一点,如下所示;
NSSortDescriptor *characterSort = [NSSortDescriptor sortDescriptorWithKey:@"strength" ascending:YES selector:@selector(compare:)];
NSSortDescriptor *descriptor = [[NSSortDescriptor alloc] initWithKey:@"strength" ascending:YES];
NSMutableArray *arr = [[characters sortedArrayUsingDescriptors:[NSArray arrayWithObjects:descriptor,nil]]mutableCopy];
NSSortDescriptor *valueDescriptor = [[NSSortDescriptor alloc] initWithKey:@"strength" ascending:YES];
NSArray *descriptors = [NSArray arrayWithObject:valueDescriptor];
NSArray *sortedArray = [characters sortedArrayUsingDescriptors:descriptors];
但与这些方法我得到未使用的变量警告,没有得到排序在我原来的数组时,我调用该方法。
#import <Foundation/Foundation.h>
#import "character_array.h"
@implementation CharacterArray
- (instancetype) init
{
self = [super init];
if (self)
self.characters = [NSMutableArray array]; return self;
}
- (void) addCharacter: (Character *) charact
{ NSLog(@"add character method entered");
[self.characters addObject: charact];
}
- (void) printAll
{
int num = 1;
NSLog(@"print all method entered");
for (Character *theCharacter in self.characters)
{ NSLog (@"%d : ", num++);
[theCharacter printDetails];
}
}
@end
#import <Foundation/Foundation.h>
#import "game_character.h"
@interface CharacterArray : NSMutableArray
@property (strong) NSMutableArray *characters;
- (void) addCharacter: (Character *) charact;
- (void) printAll;
@end
主
下进口一切
CharacterArray *characters;
在main方法
characters = [CharacterArray alloc];
characters = [characters init];
你确定你需要创建一个CharacterArray
类和,它应该是一个子类NS(Mutable)Array
。检查意图不是你应该使用NS(Mutable)Array
的实例characterArray
,这似乎很可能在“第一个Objective-C任务”中;或者您打算编写您的课程而不是继承自NS(Mutable)Array
,但不太可能但可能。
最不可能的是,你的意思是要了解NS(Mutable)Array
不能被细分为小类。注意你的错误包括:
...只为抽象类定义...
Objective-C中确实没有“抽象”类,但系统的框架也使用的设计被称为类集群,它可以表现出一些相同的行为,这就是错误信息试图指出的内容。对于类集群,简单继承无法按预期工作,因为在这种情况下公共类NS(Mutable)Array
实际上并未实现其许多方法的行为,但依赖于集群中的其他类来执行此操作 - 而这些实现不是由公共类的子类继承。
听起来很复杂吗?这就是为什么它在“第一项任务”中出人意料的原因。
不过也不是很难真正继承NS(Mutable)Array
只要你遵守规则,这是实现一组指定的方法,其实现是不从NS(Mutable)Array
继承,当你继承。请阅读NSMutableArray
documenatation和NSArray
documentation中的“子类别备注”部分,了解您必须执行的方法列表,其中错误消息指示包括count
。
HTH
错误消息表明您已尝试子类'NSArray',尽管这可能不是经常需要或推荐的。您应该将类'CharacterArray'的详细信息以及哪些类型的变量添加到您的问题中,以便帮助人们帮助您。 – CRD
@CRD我添加了CharacterArray类和标题。我必须为我的任务使用这种类型的数组类。 – Lee
为什么'CharactersArray'继承自'NSMutableArray',而你似乎使用的似乎接近'NSMutableArray'的属性是你的属性'characters'?确实有道理。你需要定义' - (NSInteger)count'方法,它可以返回'self.characters.count',但是再一次,从NSMutableArray继承似乎毫无意义。 – Larme