坚持基本IOS
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
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;