-1

我有一个 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

4 回答 4

2

pNre是对的。但是如果你真的想让你的代码工作,你有两个选择:

  1. 子类化。这并不容易,NSMutableArray因为它是一个类集群。所以简单地继承它(就像ennukiller建议的那样)是不够的。看看这个

  2. 对象下标。这是 Xcode 4.4 引入的一项相对较新的技术。它基本上允许您为您的类覆盖“[]”运算符。如果您对此感兴趣,请查看此帖子。

于 2013-09-22T17:54:55.777 回答
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

于 2013-09-22T16:53:59.093 回答
0

你只是对你想要的东西感到困惑。

如果你改变

+ (id)sharedArrayOfSelectedRows;

+ (<putherethetypethatyoureallywanted)sharedArrayOfSelectedRows;

那么你错在哪里就会变得很明显。

于 2014-04-09T13:25:29.960 回答
-2

我认为您需要从 NSMutableArray 子类化:

@interface SingletonArrayOfSelectedRows : NSMutableArray  {
}
@property (nonatomic, retain) NSMutableArray *arrayOfSelectedRows;

+ (id)sharedArrayOfSelectedRows;
@end
于 2013-09-22T16:52:33.567 回答