我有一个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;
}
我的应用程序中有两个View Controllers(vcA和vcB)。我想要做的是暂时存储来自vcA的数据,以便stringArray中的数据可以在vcB之后访问。
以下是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中调用打印数组的内容时,没有输出,因为数组是空的,尽管值已添加到数组中。我做错了什么?
答案 0 :(得分:1)
试试这个,
创建Singleton
+(Singleton *)sharedSingleton {
static dispatch_once_t once;
static Singleton *sharedSingleton;
dispatch_once(&once, ^{
sharedSingleton = [[self alloc] init];
});
return sharedSingleton;
}
和单例类的init
方法
- (id)init
{
self = [super init];
if (self) {
//@property stringArray
self.stringArray = [[NSMutableArray alloc] init];
}
return self;
}
Singleton
- (void)saveString:(NSString *)stringObject {
[self.stringArray addObject:stringObject];
}
- (NSArray *)getArrayContents {
return self.stringArray;
}
答案 1 :(得分:1)
我有这个问题。我在单身人士中的代码如下所示:
+ (ReportDataList*)sharedDataArray
{
static dispatch_once_t pred;
static ReportDataList *shared = nil;
dispatch_once(&pred, ^{
shared = [[ReportDataList alloc] init];
self.rDetailsArray = [[NSMutableArray alloc] init];
});
return shared;
}
我错误地初始化了数组,因此当我在代码中创建对单例的引用时,它正在清空它。我删除了数组初始化,这是在 - (id)init方法中完成的,它工作正常。所以,我的代码看起来像这样:
+ (ReportDataList*)sharedDataArray
{
static dispatch_once_t pred;
static ReportDataList *shared = nil;
dispatch_once(&pred, ^{
shared = [[ReportDataList alloc] init];
});
return shared;
}
- (id)init
{
self = [super init];
if (self) {
self.rDetailsArray = [[NSMutableArray alloc] init];
[self initWithDummyValues];
}else{
NSLog(@"problem initialising array list");
}
return self;
}
答案 2 :(得分:0)
首先,这两种方法应该使用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;