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

问题描述:

我已经宣布一个NSMutableArray作为一个单身人士;当我尝试检查数组数时,应用程序崩溃!下面是代码:检查0个元素的NSMutableArray会导致崩溃;为什么?

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

此代码是相同的代码,我发现遍布SO和谷歌。使用XCode5,我已经检查过,以确保单身人士分配(和它),并有一个有效计数(0)的单身人士。

UPDATE 下面是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

怎么样的崩溃消息和堆栈? –

+0

这是我从BugSense获取的崩溃消息:*** - [NSArray count]:仅为抽象类定义的方法。定义 - [SingletonArrayOfSelectedRows计数]! – SpokaneDude

+0

真的吗?我可能不知道有关Objective-C的所有知识,但我做了......我没有要求给亚马逊的指示器;我寻求帮助。我会更新这个问题。 – SpokaneDude

按照documentation

NSArray的任何子类都必须重写原始实例方法count和objectAtInde X:。

既然你继承的NSMutableArray你需要重写以下的NSMutableArray primitive方法以及:

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

+0

那么我该怎么做?我在哪里做重写?在单例定义中?你能用一个例子来指向我的文档吗? – SpokaneDude

+0

您将不得不重写SingletonArrayOfSelectedRows类中的方法。这里是一个示例[链接](http://blog.securemacprogramming.com/2010/05/on-type-safety-and-making-it-harder-to-write-buggy-code/)。希望能帮助到你!但是你真的需要继承NSMutableArray吗?你需要一个NSMutableArray的单例,为什么不把它作为SingletonClass和NSObject的子类中的成员来添加。 –

+0

我试着用NSObject(我的所有单身使用NSObject)做它,但有问题;但是,我看到我的上一个问题已经添加到了,所以我要检查一下。在那里建议我不要在我的单身人士中继承。感谢您的回应;我会回到你身边的......:D – SpokaneDude

不要子类NSMutableArray来做到这一点。 NSMutableArray是一个类集群。所有实际的数组实现都在NSMutableArray的子​​类内部。如果你继承NSMutableArray,那么你的子类不会实际实现任何数组行为,除非你自己写。