检查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
NSArray的任何子类都必须重写原始实例方法count和objectAtInde X:。
既然你继承的NSMutableArray你需要重写以下的NSMutableArray primitive方法以及:
insertObject:atIndex: removeObjectAtIndex: ADDOBJECT: removeLastObject replaceObjectAtIndex:withObject:
那么我该怎么做?我在哪里做重写?在单例定义中?你能用一个例子来指向我的文档吗? – SpokaneDude
您将不得不重写SingletonArrayOfSelectedRows类中的方法。这里是一个示例[链接](http://blog.securemacprogramming.com/2010/05/on-type-safety-and-making-it-harder-to-write-buggy-code/)。希望能帮助到你!但是你真的需要继承NSMutableArray吗?你需要一个NSMutableArray的单例,为什么不把它作为SingletonClass和NSObject的子类中的成员来添加。 –
我试着用NSObject(我的所有单身使用NSObject)做它,但有问题;但是,我看到我的上一个问题已经添加到了,所以我要检查一下。在那里建议我不要在我的单身人士中继承。感谢您的回应;我会回到你身边的......:D – SpokaneDude
不要子类NSMutableArray来做到这一点。 NSMutableArray是一个类集群。所有实际的数组实现都在NSMutableArray的子类内部。如果你继承NSMutableArray,那么你的子类不会实际实现任何数组行为,除非你自己写。
怎么样的崩溃消息和堆栈? –
这是我从BugSense获取的崩溃消息:*** - [NSArray count]:仅为抽象类定义的方法。定义 - [SingletonArrayOfSelectedRows计数]! – SpokaneDude
真的吗?我可能不知道有关Objective-C的所有知识,但我做了......我没有要求给亚马逊的指示器;我寻求帮助。我会更新这个问题。 – SpokaneDude