我有一个具有两个方法的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/