我已将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
答案 0 :(得分:2)
不要将NSMutableArray子类化为此。 NSMutableArray是一个类集群。所有实际的数组实现都在NSMutableArray的子类中。如果您继承NSMutableArray,那么除非您自己编写,否则您的子类实际上不会实现任何数组行为。
答案 1 :(得分:0)
NSArray的任何子类都必须覆盖原始实例方法count和objectAtIndex:。
由于您是NSMutableArray的子类,因此您还需要覆盖以下NSMutableArray primitive方法:
insertObject:atIndex: removeObjectAtIndex: ADDOBJECT: removeLastObject replaceObjectAtIndex:withObject: