【发布时间】:2017-05-08 09:58:16
【问题描述】:
我有一个 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
在 main 下导入所有内容
CharacterArray *characters;
在主方法中
characters = [CharacterArray alloc];
characters = [characters init];
【问题讨论】:
-
错误消息表明您已尝试将
NSArray子类化,尽管可能,但通常不需要或不推荐这样做。您应该在您的问题中添加您的课程CharacterArray的详细信息以及哪些变量具有该类型,以便帮助人们帮助您。 -
@CRD 我添加了 CharacterArray 类和标题。我不得不使用这种类型的数组类来完成我的作业。
-
为什么
CharactersArray继承自NSMutableArray,而您似乎使用的似乎接近NSMutableArray的只是您的财产characters?有道理。您需要定义-(NSInteger)count方法,它可能返回self.characters.count,但同样,这似乎对从 NSMutableArray 继承毫无意义。 -
@Larme 实际上我不知道为什么我们必须创建一个 CharactersArray 类,这是我的第一个目标 c 任务。它在规范中为它使用一个类。如果我只能在 main 中创建数组,我就可以做到。
-
@Larme 我遇到了同样的错误,然后我尝试使用 [characters removeObjectAtIndex:rand2];我需要在 CharacterArray 中定义 removeObjectAtIndex。我该怎么做才能删除随机选择的特定索引
标签: objective-c sorting cocoa nsmutablearray