我有一个NSMutableArray作为单身人士;当我尝试添加一个对象时,我得到一个构建错误。代码有什么问题?
这是singleton.h代码:
@interface SingletonArrayOfSelectedRows : NSObject {
}
@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
以下是我收到错误的代码行:
SingletonArrayOfSelectedRows *arrayOfSelectedRows = [SingletonArrayOfSelectedRows sharedArrayOfSelectedRows];
[arrayOfSelectedRows[indexPath.row] = [NSNumber numberWithInt:-1]; // reset it...
这就是错误:
读取未在“SingletonArrayOfSelectedRows *”类型的对象上找到的数组元素的预期方法
答案 0 :(得分:2)
pNre是对的。但如果您真的希望代码能够运行,那么您有两种选择:
子类。这对于NSMutableArray
来说并不容易,因为它是一个类集群。所以简单地对它进行子类化(如建议的ennuikiller)是不够的。 have a look at this
对象订阅。这是Xcode 4.4引入的一项相对较新的技术。它基本上允许您覆盖您的类的'[]'运算符。如果您对此感兴趣,请查看this post。
答案 1 :(得分:1)
我想你想要
SingletonArrayOfSelectedRows * arrayOfSelectedRows = [SingletonArrayOfSelectedRows sharedArrayOfSelectedRows];
// this adds sets the object at index indexPath.row of the property arrayOfSelectedRows
arrayOfSelectedRows.arrayOfSelectedRows[indexPath.row] = [NSNumber numberWithInt:-1];
在您的代码中,您将SingletonArrayOfSelectedRows的实例视为NSMutableArray
答案 2 :(得分:0)
你只是对自己想要的东西感到困惑。
如果你改变了
+ (id)sharedArrayOfSelectedRows;
到
+ (<putherethetypethatyoureallywanted)sharedArrayOfSelectedRows;
那么你出错的地方就会变得非常明显。
答案 3 :(得分:-2)
我认为您需要从NSMutableArray继承子类:
@interface SingletonArrayOfSelectedRows : NSMutableArray {
}
@property (nonatomic, retain) NSMutableArray *arrayOfSelectedRows;
+ (id)sharedArrayOfSelectedRows;
@end