Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 可变单态问题_Iphone_Objective C_Cocoa Touch_Singleton_Nsmutablearray - Fatal编程技术网

Iphone 可变单态问题

Iphone 可变单态问题,iphone,objective-c,cocoa-touch,singleton,nsmutablearray,Iphone,Objective C,Cocoa Touch,Singleton,Nsmutablearray,我想得到一些帮助来整理我为实现NSMutableArray单例而编写的代码 .h文件 @interface MySingleton : NSObject { NSMutableArray *globalArray; } + (MySingleton *)instance; - (NSMutableArray *) getArray; - (void) addArray:(NSObject *)arrayToAdd; - (id) init; .m file @impl

我想得到一些帮助来整理我为实现NSMutableArray单例而编写的代码

.h文件

@interface MySingleton : NSObject {

    NSMutableArray *globalArray;

}

+ (MySingleton *)instance;

- (NSMutableArray *) getArray;

- (void) addArray:(NSObject *)arrayToAdd;

- (id) init;



.m file

@implementation MySingleton


- (id) init
{
    self = [super init]; 
    globalArray = [[NSMutableArray alloc] init];
    return self;
}


+ (MySingleton *)instance  {

    static MySingleton *instance;

    @synchronized(self) {
        if(!instance) {
            instance = [[MySingleton alloc] init];

        }
    }
    return instance;
}


- (NSMutableArray *) getArray{
    return globalArray;
}



- (void) addArray:(NSMutableArray *)arrayToAdd
{

    [globalArray addObject:arrayToAdd];  

}
someviewcontroller.m

    MySingleton  *prodInstance = [MySingleton instance];
[prodInstance addArray:tmpArray];
NSLog(@"cnt tmpArray %i",[tmpArray count]);
NSLog(@"cnt singleton %i",[[prodInstance getArray] count]);
控制台将显示计数3和1

我认为[prodInstance getArray]将与tmpArray相同


谢谢

问题在于您的
addArray
方法将
tmpArray
放入
globalArray
中,这显然不是您想要的

我认为根本没有理由使用
addArray
——只需调用
getArray
获取全局数组,然后使用它。例如:

// add all objects in tmpArray to prodInstance global array
[[prodInstance getArray] addObjectsFromArray:tmpArray];

问题是您的
addArray
方法将
tmpArray
放入
globalArray
中,这显然不是您想要的

我认为根本没有理由使用
addArray
——只需调用
getArray
获取全局数组,然后使用它。例如:

// add all objects in tmpArray to prodInstance global array
[[prodInstance getArray] addObjectsFromArray:tmpArray];

-addArray:
中,将数组参数
arrayToAdd
添加为全局数组中的单个元素。看起来您想添加数组参数的所有元素,所以替换

[globalArray addObject:arrayToAdd];


此外,由于参数不需要是一个可变数组,请考虑将参数类型更改为<代码> NSARTS* .< /P> < P>在<代码> -AdAdARS:<代码>中,将数组参数<代码> AlraytoAddio/Cuth>作为全局数组中的一个元素添加。看起来您想添加数组参数的所有元素,所以替换

[globalArray addObject:arrayToAdd];

此外,由于参数不需要是一个可变数组,请考虑将参数类型更改为<代码> NSARSt* < /P>