gpt4 book ai didi

Objective-C 模型- View 通信

转载 作者:行者123 更新时间:2023-12-02 22:00:22 24 4
gpt4 key购买 nike

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

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]];
}

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

最佳答案

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

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

使AViewController符合它。这样,ClassB 就可以忽略 Controller 层中的任何更改。 ClassB 的实例只需要通知其委托(delegate)原始数据的更改,并且委托(delegate)(即 View Controller )的工作就是使用 View 显示该更改。

关于Objective-C 模型- View 通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17067907/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com