-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は正しいです。ただし、コードを本当に機能させたい場合は、次の 2 つのオプションがあります。

  1. サブクラス化。NSMutableArrayこれはクラス クラスタであるため、簡単ではありません。そのため、( ennuikillerが提案したように) 単純にサブクラス化するだけでは十分ではありません。これを見てください

  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 に答える