我有一个类,当加载UIViewController时会创建一个实例。我需要这个类的实例能够在发生某些事件时更新ViewController。这就是我完成这个的方法:
AViewController.h
@property (weak, nonatomic) IBOutlet UIProgressView *progress;
@Property (strong, nonatomic) ClassB *classB
-(void)incrementProgressBar: (NSNumber *)currentProgress;
AViewController.m
-(void)viewDidLoad
{
_classB = [ClassB alloc]initWithNonReleventVariable:variable];
[_classB setInstanceViewController:self]
}
-(void)incrementProgressBaar: (NSNumber *)currentProgress;
{
[_progressBar setProgress:[currentProgrsss floatValue] animated:YES];
}
ClassB.h
@property (strong, nonatomic)AViewController *avc;
@property (nonatomic) double progress;
ClassB.m
-(void)incrementExerciseProgress
{
//do some calculations here
[self.avc incremtProgressBar:[NSNumber numberWithDouble:_progress]];
}
我从其他人那里继承了这段代码,但它运行正常。所以我的问题是:这是一种“正确”的方法吗?我想知道这是最佳做法吗?或者如果不是我能做什么来修复它所以它是。我有一些时间在这个项目上,所以我想确保我尽可能正确地做到这一点。感谢。
答案 0 :(得分:3)
这样,引入了来自两个不同层的两个类之间的高耦合。您可以改为创建ClassBDelegate
协议。
@protocol ClassBDelegate <NSObject>
- (void) classB: (ClassB *)class hasIncrementedProgressTo:(NSNumnber *)prgoress;
@end
让AViewController
符合它。这样,ClassB
可以忽略控制器层中的任何更改。 ClassB
的实例只需要通知其委托者原始数据的变化,并且代理人的工作,即视图控制器,使用视图显示更改。
答案 1 :(得分:2)
他们可以共享受View事件影响的可变数据结构(例如NSMutableDictionary),并让KVO通知其他类这个更改,因此它们完全被数据结构解耦。
MAVVONotificationCenter库可以改进KVO部分:)
如果你需要一个例子,请告诉我
问候
Luis Alejandro
价: