У меня есть синглтон, как показано ниже, который создает экземпляр NSDictionary для хранения моих данных. Вот .h:
@interface FirstLast : NSObject
@property (strong, nonatomic, readonly) NSArray *firstArray;
@property (strong, nonatomic, readonly) NSArray *lastArray;
@property (strong, nonatomic, readonly) NSDictionary *fl;
+ (FirstLast *) firstLast;
- (NSDictionary *) tempDic;
@end
Вот это .m
@implementation FirstLast
@synthesize firstArray = _firstArray;
@synthesize lastArray = _lastArray;
@synthesize fl = _fl;
+ (FirstLast *)firstLast {
static FirstLast *singleton;
static dispatch_once_t once;
dispatch_once(&once, ^{
singleton = [[FirstLast alloc] init];
NSLog(@"FirstLast instantiated");
});
return singleton;
}
- (NSDictionary *) tempDic{
_firstArray = [[NSArray alloc] initWithObjects:@"Bob", @"Joe", @"Sally", @"Sue", nil];
_lastArray = [[NSArray alloc] initWithObjects:@"Jones", @"Johnson", @"Thompson", @"Miller", nil];
_fl = [NSDictionary dictionaryWithObjects:_firstArray
forKeys:_lastArray];
NSLog(@"tempDic just made _fl at this address");
NSLog(@"%p", _fl);
return _fl;
}
@end
Все это прекрасно работает. В контроллере вида я создаю все это впервые (тоже работает нормально):
NSLog(@"VC is setting up tempDic");
[[WordsClues wordsClues] tempDic];
Когда я пытаюсь получить доступ к tempDic в другом месте, например:
NSInteger rIndex = arc4random_uniform(4) + 1;
NSString *fname = [[[FirstLast firstLast].tempDic allValues] objectAtIndex:rIndex];
работает нормально, но, когда я повторяю этот процесс, каждый раз я создаю новый tempDic. Я знаю это, потому что NSLog, давая адрес, каждый раз дает другой ответ. Я действительно хочу получить доступ к существующему словарю, что, как я думал, должен был выполнить мой синглтон. Очевидно, я либо неправильно обращаюсь к tempDic, либо неправильно понимаю, что синглтон может сделать для меня, либо у меня неправильно настроен tempDic. Цель состоит в том, чтобы получить случайное значение из одной копии tempDic, а не записывать локальные копии tempDic повсюду. Спасибо.