Вот мой Singleton Object.
#import "SettingsManager.h"
//#import "SynthesizeSingleton.h"
@implementation SettingsManager
//SYNTHESIZE_SINGLETON_FOR_CLASS(SettingsManager);
static SettingsManager* _sharedSettingsManager =nil;
-(NSString *)getString:(NSString*)value
{
return [settings objectForKey:value];
}
-(NSMutableDictionary*)getSettingsArray
{
return settings;
}
-(int)getInt:(NSString*)value {
return [[settings objectForKey:value] intValue];
}
-(void)setValue:(NSString*)value newString:(NSString *)aValue {
[settings setObject:aValue forKey:value];
}
-(void)setValue:(NSString*)value newInt:(int)aValue {
[settings setObject:[NSString stringWithFormat:@"%i",aValue] forKey:value];
}
-(void)save
{
[[NSUserDefaults standardUserDefaults] setObject:settings forKey:@"ClimbingStrategy"];
[[NSUserDefaults standardUserDefaults] synchronize];
}
-(void)load
{
[settings addEntriesFromDictionary:[[NSUserDefaults standardUserDefaults] objectForKey:@"ClimbingStrategy"]];
}
-(void)logSettings
{
for(NSString* item in [settings allKeys])
{
NSLog(@"[SettingsManager KEY:%@ - VALUE:%@]", item, [settings valueForKey:item]);
}
}
+(SettingsManager*)sharedSettingsManager
{
if(!_sharedSettingsManager)
{
_sharedSettingsManager = [[super allocWithZone:NULL] init];
}
return _sharedSettingsManager;
}
+ (id)allocWithZone:(NSZone *)zone
{
return [[self sharedSettingsManager] retain];
}
- (id)copyWithZone:(NSZone *)zone
{
return self;
}
- (id)retain
{
return self;
}
- (NSUInteger)retainCount
{
return NSUIntegerMax; //denotes an object that cannot be released
}
- (void)release
{
//do nothing
}
- (id)autorelease
{
return self;
}
-(id)init {
settings = [[NSMutableDictionary alloc] initWithCapacity:10];
return [super init];
}
@end
Где настройки - это NSMutableDictionary.После 4 или 5 доступа к одноэлементному объекту одноэлементный объект выпускает словарь «настройки».Я не могу узнать, где я запрограммировал это неправильно.Я попытался пройти через это, но я так и не нашел точное место, когда объект настроек волшебным образом исчезает.
update Я обновил код, скопированный прямо с веб-сайта Apple.Я также использовал макрос для синглтона.у обоих все еще есть проблемы с настройками nsmutabledictionary.
Update2: я получаю это, когда пытаюсь получить доступ к массиву настроек:
Программа получила сигнал EXC_BAD_ACCESS, Не удалось получить доступ к памяти.Причина: KERN_INVALID_ADDRESS по адресу: 0x59200000 0x0177d09f в objc_msgSend () Об отлаживаемой программе было сообщено, что она находилась в функции, вызываемой из GDB.GDB восстановил контекст до того, что было до вызова.Чтобы изменить это поведение, используйте «set unwindonsignal off». Оценка выражения, содержащего функцию (_NSPrintForDebugger), будет прекращена.