ios - 如何使用MVC获取变量

标签 ios variables model-view-controller model

我是一名初学者,在上一个问题中我了解了一些有关 MVC 模式的知识。但我还是有一些疑问。 我正在作为一名初级人员,修改程序。我将留下主要问题。

最后一个问题是:

"I'm trying to send a segmented control variable to another file but I cant get it, I think I'm quiet close, but I need a little help, what's wrong?"

--<AdSettingsTVC.h>-- 

@interface AdSettingsTVC : UITableViewController

@property (strong, nonatomic) NSString *serverName;
@property (strong, nonatomic) IBOutlet UISegmentedControl *servidorControl;

-(IBAction)getServer:(UISegmentedControl *)sender;

@end

--<AdSettingsTVC.m>--

@interface AdSettingsTVC () <UITextFieldDelegate, UIPickerViewDelegate, UIPickerViewDataSource>
//General Settings
@end

@implementation AdSettingsTVC

- (IBAction)getServer:(UISegmentedControl *)sender{
    ANLogDebug(@"%@ setServidor | Server changed to Settings: %ld", CLASS_NAME, (long)sender.selectedSegmentIndex);
    if (sender.selectedSegmentIndex == 0){
        self.serverName = @"Server 1";
    } else if (sender.selectedSegmentIndex == 1){
        self.serverName = @"Server 2";
    } else if (sender.selectedSegmentIndex == 2){
        self.serverName = @"Server 3";
    }   
}

--<AnAdFetcher.m>--

- (void)requestAdWithURL:(NSURL *)URL {

    AdSettingsTVC *settings = [[AdSettingsTVC alloc] init];

        NSString *nameServer = settings.serverName  --> it's null
        self.URL = URL ? URL : [self adURLWithBaseURLString:[NSString stringWithFormat:@"http://%@", nameServer]];

}

这个问题的答案是我没有使用 MVC 模式,所以当我调用 AdSettingsTVC.alloc.init 时,值被初始化为 nil。然后我读到我必须使用模型来声明逻辑运算符。

现在,我意识到我有两个模型文件,和,但我不知道要在这两个文件中声明什么,以便在上面显示的文件中获取变量“serverName”。

我必须在模型文件中声明什么以及如何从 AnAdFetcher.m 获取变量

非常感谢您的宝贵时间

最佳答案

当你第一次初始化你的viewcontroller时

AdSettingsTVC *settings = [[AdSettingsTVC alloc] init];

其中的所有变量都设置为 nil 或 0(它们实际上也可能是垃圾值,但假设它们在当前形式下不可用)。所以如果在那之后你要求一个变量:

NSString *nameServer = settings.serverName;

它将返回零。我猜你认为它应该返回基于:

if (sender.selectedSegmentIndex == 0){
    self.serverName = @"Server 1";
} else if (sender.selectedSegmentIndex == 1){
    self.serverName = @"Server 2";
} else if (sender.selectedSegmentIndex == 2){
    self.serverName = @"Server 3";
}

但是你还没有调用那个函数,你只是初始化了 Controller 。如果您希望 serverName 在像这样的 Controller 初始化后立即生效,那么您将不得不在 Controller 类中放置一个自定义初始化程序(或重载基本初始化程序)。在该初始化程序中,您将必须创建您的 UISegmentedControl,然后根据其初始设置设置 serverName。我不确定在使用 Storyboard 或 xib 初始化时所有视觉对象何时创建和可用,所以最好的办法是在 View Controller 中创建一个函数(初始化后直接可用),例如:

-(NSString*)retrieveServerName:
{
    [self getServer:mySegmentedControl];
    return self.serverName ? self.serverName : @"initial case when serverName is nil";
}

作为一个观点,名为 getServer 的方法实际上是一个设置方法,而不是获取方法。您可能会考虑将其重命名为更符合该函数功能的名称。

关于ios - 如何使用MVC获取变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21913172/

相关文章:

iphone - <加速/加速.h> "file not found"

c - 在 C 中,如何编码将每个输入的数字转入其自己的变量?

C# 新手 : how to know the meaning of a variable in a lambda expression

java - 分配变量时,符号是什么意思? ( java )

ios - UIPageControl 中的控制 "active"点

ios - 将电话号码添加到一个人

ios - 在 Swift 中使用 Alamofire 进行调用时出现额外参数 'method'

php - 在 Controller 中使用模型和存储库

javascript - 如何与其他网站共享页脚控件?

java - 在 MVC 中,与应用程序模型相反的 GUI 模型是什么?