我有一個叫做Singleton
的單身人士管理整個應用程序所需的某些變量。單身人士記憶體管理(多個班級)
我正在使用View Controller HomeViewController
,它初始化viewDidLoad
上的單例,然後向服務器發送消息並接收信息。然後,它會將這些信息與一個單獨的課程XMLParser
解析。
當XMLParser
完成解析它發送一個通知給HomeViewController
操作已完成,然後HomeViewController
數據轉儲到NSLog
。
在我的XMLParser
班,我打電話[singleton setXX:XX]
,然後NSLog(@"%@", [[singleton XX]description]);
完美轉儲數據。如果我回到HomeViewController
(通知帖子之後)並嘗試記錄相同的數據,則返回Null
。
我試着不初始化在viewDidLoad
單身人士和移動初始化,直到我收到通知說,解析完成,但我仍然得到Null
。有任何想法嗎?我確定它與內存管理有關(ARC,btw),但我不確定在哪裏。
編輯:這是我的Singleton
的代碼。
//.h
//...
@property (nonatomic, retain) NSArray *linkedList;
@property (nonatomic, retain) NSDictionary *sessionData;
+ (id)sharedSingleton;
//.m
static MySingleton *sharedSingleton = nil;
@implementation MySingleton
@synthesize linkedList, sessionData;
+ (id)sharedSingleton {
@synchronized(self) {
if (sharedSingleton == nil)
sharedSingleton = [[self alloc] init];
}
return sharedSingleton;
}
EDIT2:這裏是我的單身存取方法等
//XMLParser
- (id) init {
self = [super init];
if (self != nil) {
if (!singleton) singleton = [[MySingleton alloc]init];
}
return self;
}
//...cut because no singleton access
//Closing Element
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
{
if ([elementName isEqualToString:@"SessionData"])
{
NSLog(@"Completed with SessionData. ID:11116");
[singleton setSessionData:sessionData];
NSLog(@"SessionData Description: \n%@", [sessionData description]);
[[NSNotificationCenter defaultCenter] postNotificationName:@"pushToScreen" object:nil];
return;
}
}
//HomeViewController
- (void)viewDidLoad
{
[super viewDidLoad];
singleton = [MySingleton sharedSingleton];
}
//...cut for useless code
//Then when notification received, it calls this selector
- (void)connect
{
//singleton = [MySingleton sharedSingleton];
NSLog(@"%@", [[singleton linkedList]description]);
}
我們需要了解如何在XMLParser和HomeViewController中訪問單例。不要鍵入你的代碼的近似值。只需複製並粘貼實際的代碼。 –
你的@property聲明是什麼樣的?他們是否保留傳遞給你的setter方法的值? –
已更新。辛格爾頓位居榜首,其餘部分位於下方。 – Baub