我有一个单身人士,我想用它来管理我的观点的屏幕动画。这是我的。
#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来获取它的getter和setter。
在我的ViewController中,我实例化了动画管理器以及一系列名为Section的UIView子类。每一个我都将数据(x / y w / h,标题等)存储在字典中,并将其传递给动画管理器中的字典。在Section类中,我还实例化动画管理器并添加一个调用方法的UITapGestureRecognizer,该方法将哪个部分传递给动画管理器中的方法(checkToggleStatus)。
你可以在方法中看到我只记录sectionData。问题是我的值为null。
也许我对单身人士的理解是错误的。我的假设是类只会被实例化一次,如果它已经被实例化,那么将返回现有对象。
我确实需要所有其他的Section类数据,就像在响应中动画其他动画一样,我可以通过将tapped Section传递给动画管理器并执行[[section superview] subviews]然后循环并获取每种方式的数据,但似乎是多余的,因为在创建ViewController时,这些数据是可用的。
我在尝试传输数据时做错了什么?有更好的解决方案吗?我愿意接受建议和批评。
由于
答案 0 :(得分:1)
h file
@interface OAI_AnimationManager : NSObject
@property (nonatomic, retain) NSMutableDictionary* sectionData;
+(OAI_AnimationManager* )sharedAnimationManager;
- (void) checkToggleStatus : (UIView* ) thisSection;
@end
m file
static OAI_AnimationManager* _sharedAnimationManager;
@implementation OAI_AnimationManager
@synthesize sectionData = _sectionData;
+(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
注意我从标题中移动了sectionData变量并将其移动到实现文件中。不久前,他们将其更改为可以合成属性的位置,并在其旁边指定实例变量名称...因此:
sectionData = _sectionData;
我还添加并强调了实例变量...这是私有变量的通用约定,如果你尝试只输入 sectionData ,它也会抛出编译错误checkToggleStatus的return语句:现在您必须输入 self.sectionData 或 _sectionData 。
您没有包含创建字典实例的代码,但我打赌您没有将其设置为 self.sectionData = [[NSDictionary alloc] init] ,这意味着它不会保留该值,下次调用它时将得到null。经典的记忆管理错误......我很清楚,因为我学到了很难的呵呵呵呵。