Objective-C模型 - 查看通信

时间:2013-06-12 14:18:08

标签: objective-c cocoa-touch

我有一个类,当加载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]];
}

我从其他人那里继承了这段代码,但它运行正常。所以我的问题是:这是一种“正确”的方法吗?我想知道这是最佳做法吗?或者如果不是我能做什么来修复它所以它是。我有一些时间在这个项目上,所以我想确保我尽可能正确地做到这一点。感谢。

2 个答案:

答案 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

价: