-1

我已将 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
4

2 回答 2

2

不要继承 NSMutableArray 来执行此操作。NSMutableArray 是一个类簇。所有实际的数组实现都在 NSMutableArray 的子类中。如果您将 NSMutableArray 子类化,那么您的子类实际上不会实现任何数组行为,除非您自己编写它。

于 2013-09-23T04:11:49.980 回答
0

根据文档

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

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

insertObject:atIndex: removeObjectAtIndex: addObject: removeLastObject replaceObjectAtIndex:withObject:

于 2013-09-22T17:43:34.463 回答