2

我有一个类,它在加载 UIViewController 时创建一个实例。我需要此类的实例才能在某些事件发生时更新 ViewController。这就是我完成此任务的方式:

视图控制器.h

@property (weak, nonatomic) IBOutlet UIProgressView *progress;
@Property (strong, nonatomic) ClassB *classB
-(void)incrementProgressBar: (NSNumber *)currentProgress;

视图控制器.m

-(void)viewDidLoad
{
    _classB = [ClassB alloc]initWithNonReleventVariable:variable];
    [_classB setInstanceViewController:self]
}
-(void)incrementProgressBaar: (NSNumber *)currentProgress;
{
    [_progressBar setProgress:[currentProgrsss floatValue] animated:YES];
}

B类.h

@property (strong, nonatomic)AViewController *avc;
@property (nonatomic) double progress;

B类.m

-(void)incrementExerciseProgress
{
    //do some calculations here
    [self.avc incremtProgressBar:[NSNumber numberWithDouble:_progress]];
}

我从别人那里继承了这段代码,它工作正常。所以我的问题是:这是实现这一目标的“正确”方式吗?我想知道这是否是最佳做法?或者如果不是我可以做些什么来解决它,那就是这样。我在这个项目上有一些时间,所以我想确保尽可能正确地完成它。谢谢。

4

2 回答 2

3

这样,在来自两个不同层的两个类之间引入了高耦合。您可以改为创建ClassBDelegate协议。

@protocol ClassBDelegate <NSObject>
- (void) classB: (ClassB *)class hasIncrementedProgressTo:(NSNumnber *)prgoress;
@end

使其AViewController符合。这样,ClassB可以忽略控制器层的任何变化。一个实例ClassB只需要通知它的委托原始数据的变化并且它是委托的工作,即视图控制器,使用视图来显示该变化。

于 2013-06-12T14:34:38.673 回答
2

它们可以共享受 View 事件影响的可变数据结构(例如 NSMutableDictionary),并让 KVO 通知其他类此更改,因此它们完全被数据结构解耦。

KVO 部分可以通过 MAKVONotificationCenter 库进行改进 :)

如果你需要一个例子让我知道

问候

路易斯·亚历杭德罗

参考:

于 2013-06-12T14:48:15.300 回答