我有一个具有两个方法的Singleton类:

- (void)saveString:(NSString *)stringObject {

    [[[Singleton sharedInstance] stringArray] addObject:stringObject];
}

- (NSArray *)getArrayContents {

    return [[Singelton sharedInstance] stringArray];
}


这是我的Singleton类的实现代码:

static Singleton *sharedSingleton = nil;

+ (Singleton *) sharedInstance {

    if (sharedSingleton == nil) {
        sharedSingleton = [[super alloc] init];
    }
    return sharedSingleton;
}


我的应用程序中有两个视图控制器(vcA和vcB)。我正在尝试做的是临时存储来自vcA的数据,以便将来vcB可以访问stringArray中的数据。

这是vcA用于存储数据的代码:

[[Singleton sharedInstance] saveString:stringName];


在应用程序的生命周期的后期,vcB调用Singleton类以从NSMutableArray检索值:

NSArray *newArray = [[Singleton sharedInstance] getArrayContents];
       for (NSString *test in newArray) {
           NSLog(@"Here are the contents of the array %@", test);
       }


不幸的是,当我在vcB中进行调用以打印Array的内容时,尽管将值添加到了数组,但由于数组为空,所以没有输出。我做错了什么?

最佳答案

首先,这两种方法可能应该使用self,而不是sharedInstance:

- (void)saveString:(NSString *)stringObject {

    [[self stringArray] addObject:stringObject];
}

- (NSArray *)getArrayContents {

    return [self stringArray];
}


其次,当您已经有getArrayContents时就没有stringArray方法了,并且get作为前缀通常是保留给需要复制参数的方法的。

第三,我看不到您在任何地方初始化stringArray,因此,除非缺少代码,否则它为零,并且一直为零。也许尝试:

+ (Singleton *) sharedInstance {

    if (!sharedSingleton) {
        sharedSingleton = [[self alloc] init];
        sharedSingleton.stringArray = [NSMutableArray new];
    }
    return sharedSingleton;
}


假设将stringArray声明为:

@property (readwrite, strong) NSMutableArray *stringArray;

关于ios - 尝试将对象临时存储在Singleton类的NSMutableArray中,以供以后在iOS中使用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21518398/

10-09 04:09