Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/122.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
坚持基本IOS_Ios_Uiviewcontroller_Appdelegate - Fatal编程技术网

坚持基本IOS

坚持基本IOS,ios,uiviewcontroller,appdelegate,Ios,Uiviewcontroller,Appdelegate,Ios新手有人能解释一下为什么这样做吗: UITabBarController *tabBarController = (UITabBarController *)self.window.rootViewController; vControler = [tabBarController.viewControllers objectAtIndex:0]; vControler ->mPortSIPSDK =mPortSIPSDK; 这并不是: UIStoryboard *mainSto

Ios新手有人能解释一下为什么这样做吗:

UITabBarController *tabBarController = (UITabBarController *)self.window.rootViewController;
vControler = [tabBarController.viewControllers objectAtIndex:0];

vControler ->mPortSIPSDK =mPortSIPSDK;
这并不是:

UIStoryboard *mainStoryboard =  [UIStoryboard storyboardWithName:@"Main" bundle:nil];

vControler = [mainStoryboard instantiateViewControllerWithIdentifier: @"restorTest”];
vControler ->mPortSIPSDK =mPortSIPSDK;

两部分代码都很好vController.class的两个日志返回相同的结果,但对mPortSIPSDK的调用在第二种情况下不起作用。

这样做,它会起作用

FirstViewController v1 = [[FirstViewController alloc]init];

SecViewController v2 = [[SecViewController alloc]init];

UITabBarController *tabBar = [[UITabBarController alloc]init];

tabBar.viewControllers =[[NSArray alloc]initWithObjects:v1,v2,nil];

self.window.rootViewController =tabBar;

instantialeviewcontrollerwhiteIdentifier:

此方法创建指定视图控制器的新实例 每次你叫它

第二个方法创建视图控制器的新实例, 第一个方法返回视图控制器的现有实例 连接到选项卡栏的

备注:正如@trojanfoe正确评论的那样,首选方法是将
mPortSIPSDK
声明为 一个
@属性(如果您还没有这样做),然后访问该属性(使用“点符号”),而不是直接访问实例变量(使用“->”):

更新:据我所知,您有以下问题:
AppDelegate
一个实例变量
mPortSIPSDK
(是的,它是您得到的示例项目中的一个实例变量,我将不在这里讨论实例变量与属性:-) 在某些视图控制器中,您需要这个变量。在示例项目中 AppDelegate将
mPortSIPSDK
传递给选项卡栏控制器的所有视图控制器

您可以在应用程序中执行相同的操作:AppDelegate将
mPortSIPSDK
传递给 初始视图控制器。从一个视图控制器切换到下一个视图控制器时, 将
mPortSIPSDK
传递到下一个视图控制器(在
prepareforsgue
中) 等等

另一种方法是,每个视图控制器从 AppDelegate。这需要使
mPortSIPSDK
可公开访问 (一个
@属性
或至少一个
@公共
实例变量)。
但实际上我更喜欢第一种(“传递接力棒”)方法。

发布编译器错误消息。我认为在获取情节提要时,您应该给出应用程序的主捆绑包:[NSBundle mainBundle],但实际上会出现什么错误?嗨,伙计们,不要出现任何错误,只要调用mPortSIPSDK,如果1个案例都正常,则不执行,2案例无执行…此答案与问题有何关联?您可能还想向他提及使用
->
运算符访问实例变量。感谢反馈:),那么我如何获取应用程序委托中视图控制器的现有实例?还有->:)@Waylli:您的第一个代码示例工作正常,为什么不能使用它(关于“->”:搜索“objective c property vs instance variable”,对此有很多意见,但可能与您的特定问题无关。)@MartinR我想使用导航VC并制作自定义分段,而不仅仅限于TabbarNavigation…@Waylli:也许您可以更具体一点:什么是
vController
?何时以及何时设置
vController.mPortSIPSDK
?也许
prepareForSegue
就是你要找的?
vControler.mPortSIPSDK = mPortSIPSDK;