0

私は NSMutablearray addobject について混乱しています。次のように共有インスタンス nsmutable 配列を作成しようとしています:

1.共有インスタンス

+ (netra*)someInstance
{
    if (sharedObject == nil) {
        sharedObject = [[super allocWithZone:NULL] init];
    }
    return sharedObject;
}

1.1 挿入方法

+(void) setStock:(NSInteger *)stock{
    // Ensure we are using the shared instance
    netra *shared = [netra sharedInstance];
    [shared.stockInits addObject:stock];

}

1.3 nsmutablearray の呼び出し方法

+(NSMutableArray *) getStock{
    // Ensure we are using the shared instance
    netra *shared = [netra sharedInstance];
     return shared.stockInits ;
}

2.挿入方法

-(void) some{
for(int x=0;x<=1000;x++){
    [netra setStock:i];
 }
}

3. 他のコントローラーから呼び出す方法

for (int x=0; x<=[netra getStock].count;x++){
nslog (@"i-------->%d",x);
}

ログには 0-1000 が表示されるはずですよね??? しかし、なぜ常に 1000......1000 を返すのですか? それは私のコードで間違っていますか?

4

1 に答える 1

1

まず、次のような getInstance メソッドを作成します。

@implementation SinglentonObject{
    NSMutableArray *array;
}

+ (id)getInstance {
    static SinglentonObject *instance = nil;
    @synchronized(self) {
        if (instance == nil) {
            instance = [[SinglentonObject alloc] init];
        }
        return instance;
    }
}

-(void) setStock:(NSNumber *)stock{
    // Ensure we are using the shared instance
    if(!array){
        array = [@[] mutableCopy];
    }
    [array addObject:stock];

}

- (NSMutableArray *) getStockArray
{
    return stockArray;
}

someMethod では、i を x で変更する必要があります。

-(void) write
{
    for(int x=0;x<=1000;x++){
       [[SinglentonObject getInstance] setStock:@x];
    }
}

これを読むには:

- (void) read
{
    for (NSNumber *currentStock in [[SinglentonObject getInstance] getStockArray]) {
        NSLog(@"%d", [currentStock intValue]);
    }
}

getInstance のすべてのメソッドをクラス メソッドとして変更することを忘れないでください。 http://www.johnwordsworth.com/2010/04/iphone-code-snippet-the-singleton-pattern/のような Singlenton パターンの記事を読むことをお勧めします。

于 2013-10-03T16:29:19.787 に答える