检查NSMutableArray是否有0个元素会导致崩溃;为什么?

时间:2013-09-22 17:25:38

标签: objective-c nsmutablearray

我已将NSMutableArray声明为单身人士;当我尝试检查数组计数时,应用程序崩溃了!这是代码:

    //  clear array that holds selected servcies
SingletonArrayOfSelectedRows *arrayOfSelectedRows = [SingletonArrayOfSelectedRows sharedArrayOfSelectedRows];
if([arrayOfSelectedRows count] > 0)
    [arrayOfSelectedRows removeAllObjects];

此代码与我在SO和Google上找到的代码相同。使用XCode5,我已经检查以确保分配了单例(并且它是),并且单例有一个有效的计数(0)。

更新 这是singleton.h文件的代码:

@interface SingletonArrayOfSelectedRows : NSMutableArray  {
}
@property (nonatomic, retain) NSMutableArray *arrayOfSelectedRows;

+ (id)sharedArrayOfSelectedRows;
@end

以下是singleton.m文件的代码:

@implementation SingletonArrayOfSelectedRows  {

}

@synthesize arrayOfSelectedRows;  //  rename

//  sharedSelectedCellIndexes
+ (id)sharedArrayOfSelectedRows  {

static dispatch_once_t dispatchOncePredicate = 0;
__strong static id _sharedObject = nil;
dispatch_once(&dispatchOncePredicate, ^{
    _sharedObject = [[self alloc] init];
});

return _sharedObject;
}

-(id) init {
self = [super init];
if (self) {
    arrayOfSelectedRows = [[NSMutableArray alloc] init];
}
return self;
}

@end

2 个答案:

答案 0 :(得分:2)

不要将NSMutableArray子类化为此。 NSMutableArray是一个类集群。所有实际的数组实现都在NSMutableArray的子​​类中。如果您继承NSMutableArray,那么除非您自己编写,否则您的子类实际上不会实现任何数组行为。

答案 1 :(得分:0)

根据documentation

NSArray的任何子类都必须覆盖原始实例方法count和objectAtIndex:。

由于您是NSMutableArray的子​​类,因此您还需要覆盖以下NSMutableArray primitive方法:

insertObject:atIndex: removeObjectAtIndex: ADDOBJECT: removeLastObject replaceObjectAtIndex:withObject: