iOS / Objective-C:从共享实例更改View Controller中的属性?

时间:2018-08-16 22:17:43

标签: ios objective-c storyboard

我的应用程序中的视图控制器通过通过共享实例访问的类从Web访问某些数据。此类执行各种服务器调用。

基于检索到的内容,我想在viewcontroller中更改一些内容,该内容具有连接到标签的插座属性。为此,在共享实例类中,我在故事板上分配了与视图控制器关联的init类,然后设置了outlet属性。但是,以下内容并未更改屏幕上的任何内容。

//通过共享实例访问的文件中的代码

    IDImportFacebookVC *vc= [[IDImportFacebookVC alloc] init];
        if (_contactCount==0) {
            NSString *emptyMessage = @"No friends found";
            vc.emptyMessage.text = emptyMessage;
        }

还有其他需要吗?另外,我认为这可能完全违反了MVC,因此,希望获得有关更好方法的任何建议。

预先感谢您的任何建议。

1 个答案:

答案 0 :(得分:1)

您正在创建一个新的视图控制器,您没有访问屏幕上显示的控制器。屏幕上的一个(如果已经在屏幕上)已经具有已初始化的实例。如果尚未显示在屏幕上,则操作系统将从情节提要中初始化一个,而不会使用您刚初始化的一个。即使按原样,您初始化的对象也不会像预期的那样工作,因为它没有框架,也没有在窗口或导航控制器中设置。

我认为,您的选择是按照注释中的说明发送通知,或者只是向共享实例添加一个属性,该属性包含要在屏幕上显示的数据。

如果您确定一旦显示了该屏幕,此数据将可用,那么该属性方法将起作用,您可以在此仅基于共享实例的属性来设置UI元素。如果您不确定何时可以获取数据,则可能还需要进行通知。