Singleton
という名前のシングルトンを持っています。シングルトンメモリ管理(複数クラス)
HomeViewController
私はviewDidLoad
でシングルトンを初期化し、メッセージをサーバーに送信して情報を受け取ります。その後、その情報を受け取り、別のクラスXMLParser
で解析します。 XMLParser
が、それはそれが行われていることHomeViewController
に通知を送信し、その後NSLog
にデータをダンプしますHomeViewController
解析を終えている
。
私の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宣言はどのように見えますか?彼らはあなたのセッターメソッドに渡された値を保持していますか? –
更新されました。シングルトンは一番上にあり、残りはすべて下にあります。 – Baub