Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/120.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
Ios 在singleton类中初始化后数组为零_Ios_Objective C_Singleton_Nsmutablearray - Fatal编程技术网

Ios 在singleton类中初始化后数组为零

Ios 在singleton类中初始化后数组为零,ios,objective-c,singleton,nsmutablearray,Ios,Objective C,Singleton,Nsmutablearray,我有一个单例类,我初始化了两个数组,如下所示 - (id)init { if (self = [super init]) { //----------------- request Array ------------------- // obj 00 listRequestArr=[[NSMutableArray alloc]init]; NSMutableDictionary *tratype=[[NSMutableDictionary alloc

我有一个单例类,我初始化了两个数组,如下所示

- (id)init {
if (self = [super init]) {

        //----------------- request Array -------------------

    // obj 00
    listRequestArr=[[NSMutableArray alloc]init];
    NSMutableDictionary *tratype=[[NSMutableDictionary alloc]init];
    [tratype setValue: [NSNumber numberWithInt:-1] forKey:@"ride_type_id"];
    [tratype setValue: [NSNumber numberWithInt:0] forKey:@"request_id"];
    [listRequestArr addObject:tratype];

    // obj 01
    NSMutableDictionary *ridename=[[NSMutableDictionary alloc]init];
    [ridename setValue: @"" forKey:@"ride_name"];
    [listRequestArr addObject:ridename];

    // obj 02
    NSMutableDictionary *rideprice=[[NSMutableDictionary alloc]init];
    [rideprice setValue: @"" forKey:@"ride_price"];
    [rideprice setValue: @"-1" forKey:@"ride_cid"];
    [rideprice setValue: @"" forKey:@"ride_price_name"];
    [listRequestArr addObject:rideprice];

    // obj 03
    NSMutableDictionary *reqdesc=[[NSMutableDictionary alloc]init];
    [reqdesc setValue: @"" forKey:@"request_desc"];
    [listRequestArr addObject:reqdesc];

    // obj 04
    NSMutableDictionary *modesoft=[[NSMutableDictionary alloc]init];
    [modesoft setValue: @"" forKey:@"modes_str"];
    [listRequestArr addObject:modesoft];

    // obj 05
    NSMutableDictionary *origindes=[[NSMutableDictionary alloc]init];
    [origindes setValue: @"" forKey:@"origin_add"];
    [origindes setValue:nil forKey:@"origin_placemark"];
    [origindes setValue: @"" forKey:@"des_add"];
    [origindes setValue:nil forKey:@"des_placemark"];
    [listRequestArr addObject:origindes];

    // obj 06
    NSMutableDictionary *availability=[[NSMutableDictionary alloc]init];
    [availability setValue: @"" forKey:@"ret_or_one_way"];
    [availability setValue: @"" forKey:@"depdate1"];
    [availability setValue: @"" forKey:@"depdate2"];
    [availability setValue: @"" forKey:@"retdate1"];
    [availability setValue: @"" forKey:@"retdate2"];
    [listRequestArr addObject:availability];

    // obj 07
    NSMutableDictionary *passengers=[[NSMutableDictionary alloc]init];
    [passengers setValue: @"0" forKey:@"adult"];
    [passengers setValue: @"0" forKey:@"child"];
    [passengers setValue: @"0" forKey:@"infants"];
    [listRequestArr addObject:passengers];




    requestCompletion=[[NSMutableArray alloc]init];
    for (NSInteger i = 0; i < 10; i++)
        [requestCompletion addObject:[NSNumber numberWithInteger:0]];




     return self;


}
这发生在我完成webservice调用时。在完成web服务调用后,如果我开始发出另一个请求,尽管我执行了dm=[Datamanager sharedmanager],这两个数组仍然为零;似乎它没有初始化我在
Datamanager
类中所做的操作。这是什么原因?请帮帮我。第一次有效,但第二次无效,我将它们设置为零


谢谢

当应用程序上线时,Singleton只允许使用一次。在第一次调用后,将其设置为alloc,然后再次将其设置为nil。所以第二次:还是零。这很正常。你应该检查它为零,然后重新分配

两种可能的解决方案:

1) 您不需要单例,每个视图控制器都可以使用自己的设置,因此只需设置一次

2) 您希望销毁singleton实例,并为此目的公开一个方法reinit()或clear()

使用您的代码,可能的“reset()”方法是:

- (id)init {
if (self = [super init]) {
     [self reset];
     return self;
}

-(void) reset {
        //----------------- request Array -------------------

    // obj 00
    listRequestArr=[[NSMutableArray alloc]init];
    NSMutableDictionary *tratype=[[NSMutableDictionary alloc]init];
    [tratype setValue: [NSNumber numberWithInt:-1] forKey:@"ride_type_id"];
    [tratype setValue: [NSNumber numberWithInt:0] forKey:@"request_id"];
    [listRequestArr addObject:tratype];

    // obj 01
    NSMutableDictionary *ridename=[[NSMutableDictionary alloc]init];
    [ridename setValue: @"" forKey:@"ride_name"];
    [listRequestArr addObject:ridename];

    // obj 02
    NSMutableDictionary *rideprice=[[NSMutableDictionary alloc]init];
    [rideprice setValue: @"" forKey:@"ride_price"];
    [rideprice setValue: @"-1" forKey:@"ride_cid"];
    [rideprice setValue: @"" forKey:@"ride_price_name"];
    [listRequestArr addObject:rideprice];

    // obj 03
    NSMutableDictionary *reqdesc=[[NSMutableDictionary alloc]init];
    [reqdesc setValue: @"" forKey:@"request_desc"];
    [listRequestArr addObject:reqdesc];

    // obj 04
    NSMutableDictionary *modesoft=[[NSMutableDictionary alloc]init];
    [modesoft setValue: @"" forKey:@"modes_str"];
    [listRequestArr addObject:modesoft];

    // obj 05
    NSMutableDictionary *origindes=[[NSMutableDictionary alloc]init];
    [origindes setValue: @"" forKey:@"origin_add"];
    [origindes setValue:nil forKey:@"origin_placemark"];
    [origindes setValue: @"" forKey:@"des_add"];
    [origindes setValue:nil forKey:@"des_placemark"];
    [listRequestArr addObject:origindes];

    // obj 06
    NSMutableDictionary *availability=[[NSMutableDictionary alloc]init];
    [availability setValue: @"" forKey:@"ret_or_one_way"];
    [availability setValue: @"" forKey:@"depdate1"];
    [availability setValue: @"" forKey:@"depdate2"];
    [availability setValue: @"" forKey:@"retdate1"];
    [availability setValue: @"" forKey:@"retdate2"];
    [listRequestArr addObject:availability];

    // obj 07
    NSMutableDictionary *passengers=[[NSMutableDictionary alloc]init];
    [passengers setValue: @"0" forKey:@"adult"];
    [passengers setValue: @"0" forKey:@"child"];
    [passengers setValue: @"0" forKey:@"infants"];
    [listRequestArr addObject:passengers];




    requestCompletion=[[NSMutableArray alloc]init];
    for (NSInteger i = 0; i < 10; i++)
        [requestCompletion addObject:[NSNumber numberWithInteger:0]];
}

设置
dm.listRequestArr=nil,您想要什么?因为我想在完成某些操作后刷新我的表视图,所以我不清楚您的问题<代码>dm=[Datamanager sharedmanager];dm.listRequestArr=nil因此
listRequestArr
将为零。你有什么问题?我在关闭viewcontroller时将其设置为零。当我重新打开视图控制器时,我想像第一次一样重新初始化这两个数组为什么需要一个单例呢?为什么不直接使用Factory我怎么能破坏singleton实例?我想你用过dispatch_一次吧?(尽管代码未粘贴)。只需添加一个方法即可_sharedInstance=[[Datamanager alloc]init]您可以从init中取出代码并调用它setup方法,然后从init调用setup,但也可以公开setup,以便您可以在任何时候执行它。这很粗糙,但为了简单起见,请检查修改后的答案
- (id)init {
if (self = [super init]) {
     [self reset];
     return self;
}

-(void) reset {
        //----------------- request Array -------------------

    // obj 00
    listRequestArr=[[NSMutableArray alloc]init];
    NSMutableDictionary *tratype=[[NSMutableDictionary alloc]init];
    [tratype setValue: [NSNumber numberWithInt:-1] forKey:@"ride_type_id"];
    [tratype setValue: [NSNumber numberWithInt:0] forKey:@"request_id"];
    [listRequestArr addObject:tratype];

    // obj 01
    NSMutableDictionary *ridename=[[NSMutableDictionary alloc]init];
    [ridename setValue: @"" forKey:@"ride_name"];
    [listRequestArr addObject:ridename];

    // obj 02
    NSMutableDictionary *rideprice=[[NSMutableDictionary alloc]init];
    [rideprice setValue: @"" forKey:@"ride_price"];
    [rideprice setValue: @"-1" forKey:@"ride_cid"];
    [rideprice setValue: @"" forKey:@"ride_price_name"];
    [listRequestArr addObject:rideprice];

    // obj 03
    NSMutableDictionary *reqdesc=[[NSMutableDictionary alloc]init];
    [reqdesc setValue: @"" forKey:@"request_desc"];
    [listRequestArr addObject:reqdesc];

    // obj 04
    NSMutableDictionary *modesoft=[[NSMutableDictionary alloc]init];
    [modesoft setValue: @"" forKey:@"modes_str"];
    [listRequestArr addObject:modesoft];

    // obj 05
    NSMutableDictionary *origindes=[[NSMutableDictionary alloc]init];
    [origindes setValue: @"" forKey:@"origin_add"];
    [origindes setValue:nil forKey:@"origin_placemark"];
    [origindes setValue: @"" forKey:@"des_add"];
    [origindes setValue:nil forKey:@"des_placemark"];
    [listRequestArr addObject:origindes];

    // obj 06
    NSMutableDictionary *availability=[[NSMutableDictionary alloc]init];
    [availability setValue: @"" forKey:@"ret_or_one_way"];
    [availability setValue: @"" forKey:@"depdate1"];
    [availability setValue: @"" forKey:@"depdate2"];
    [availability setValue: @"" forKey:@"retdate1"];
    [availability setValue: @"" forKey:@"retdate2"];
    [listRequestArr addObject:availability];

    // obj 07
    NSMutableDictionary *passengers=[[NSMutableDictionary alloc]init];
    [passengers setValue: @"0" forKey:@"adult"];
    [passengers setValue: @"0" forKey:@"child"];
    [passengers setValue: @"0" forKey:@"infants"];
    [listRequestArr addObject:passengers];




    requestCompletion=[[NSMutableArray alloc]init];
    for (NSInteger i = 0; i < 10; i++)
        [requestCompletion addObject:[NSNumber numberWithInteger:0]];
}
-(void) reset;