ビューの画面上のアニメーションを管理するために使用したいシングルトンがあります。これが私のです。
#import <Foundation/Foundation.h>
@interface OAI_AnimationManager : NSObject {
NSMutableDictionary* sectionData;
}
@property (nonatomic, retain) NSMutableDictionary* sectionData;
+(OAI_AnimationManager* )sharedAnimationManager;
- (void) checkToggleStatus : (UIView* ) thisSection;
@end
.m ファイル
#import "OAI_AnimationManager.h"
@implementation OAI_AnimationManager
@synthesize sectionData;
+(OAI_AnimationManager *)sharedAnimationManager {
static OAI_AnimationManager* sharedAnimationManager;
@synchronized(self) {
if (!sharedAnimationManager)
sharedAnimationManager = [[OAI_AnimationManager alloc] init];
return sharedAnimationManager;
}
}
- (void) checkToggleStatus : (UIView* ) thisSection {
//get the section data dictionary
NSLog(@"%@", sectionData);
}
@end
.h ファイルで、NSMutableDictionary を追加し、そのゲッターとセッターに @property/@synthesize を使用していることがわかります。
ViewController では、アニメーション マネージャーと、Section という UIView の一連のサブクラスをインスタンス化します。それぞれで、データ (x/yw/h、タイトルなど) をディクショナリに保存し、それをアニメーション マネージャーで宣言されたディクショナリに渡します。Section クラスでは、アニメーション マネージャーもインスタンス化し、メソッドを呼び出す UITapGestureRecognizer を追加します。このメソッドは、どのセクションがタップされたかをアニメーション マネージャーのメソッド (checkToggleStatus) に渡します。
メソッドでわかるように、sectionData をログに記録しているだけです。問題は、値が null になっていることです。
シングルトンに対する私の理解が間違っているのかもしれません。私の仮定は、クラスがインスタンス化されるのは一度だけで、すでにインスタンス化されている場合は、その既存のオブジェクトが返されるということでした。
他のすべてのセクション クラスのデータが必要です。これは、タップされたセクションをアニメーション マネージャーに渡し、[[セクション スーパービュー] サブビュー] を実行してループし、それぞれからデータを取得することで回避できます。そのようにしますが、そのデータは作成時に ViewController で使用できるため、冗長に見えます。
そのデータを転送しようとして何か間違ったことをしていますか? より良い解決策はありますか?私は提案と批判を受け入れます。
ありがとう