尝试将对象添加到NSMutableArray singleton时生成错误

时间:2013-09-22 16:48:13

标签: objective-c nsmutablearray

我有一个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 *”类型的对象上找到的数组元素的预期方法

4 个答案:

答案 0 :(得分:2)

pNre是对的。但如果您真的希望代码能够运行,那么您有两种选择:

  1. 子类。这对于NSMutableArray来说并不容易,因为它是一个类集群。所以简单地对它进行子类化(如建议的ennuikiller)是不够的。 have a look at this

  2. 对象订阅。这是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