Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.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
Iphone iOS:对正确使用AppDelegate感到困惑_Iphone_Ios - Fatal编程技术网

Iphone iOS:对正确使用AppDelegate感到困惑

Iphone iOS:对正确使用AppDelegate感到困惑,iphone,ios,Iphone,Ios,对于iOS开发人员来说还是个新手(有asp.net/web方面的背景),我想我还没有完全弄清楚每件事是如何与其他事情联系在一起的。例如,我正在构建一个以NavigationController开始的应用程序。我很高兴地将ViewController传入和传出,一切正常,但现在我需要向导航控制器添加一个rightbutton。我在其中一个ViewController中完成了此操作,如下所示: - (void)viewDidLoad { UIBarButtonItem *change = [[UIB

对于iOS开发人员来说还是个新手(有asp.net/web方面的背景),我想我还没有完全弄清楚每件事是如何与其他事情联系在一起的。例如,我正在构建一个以NavigationController开始的应用程序。我很高兴地将ViewController传入和传出,一切正常,但现在我需要向导航控制器添加一个rightbutton。我在其中一个ViewController中完成了此操作,如下所示:

- (void)viewDidLoad
{
UIBarButtonItem *change = [[UIBarButtonItem alloc] initWithTitle:@"CHANGE" style:UIBarButtonItemStylePlain target:self action:@selector(navAlert)];

self.navigationItem.rightBarButtonItem = change;

[change release];

[super viewDidLoad];
}

 - (void)navAlert
{

UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"nav pressed" message:@"You pressed the Change button" delegate:nil cancelButtonTitle:@"Yep" otherButtonTitles:nil];

[alert show];
[alert release];
}
但我不想在每个控制器中都这样做——像这样的东西应该进入AppDelegate并从那里调用吗

另外,假设我不想从NavigationController开始—我可以使用AppDelegate中的代码通过单击ViewController中设置的按钮来释放ViewController并将新的ViewController直接加载到窗口中吗

抱歉,如果这是一个有点愚蠢的问题,但我认为我还没有完全掌握不同层之间的关系,哪些代码可用于哪个控制器,等等


谢谢

您应该不要将接口相关代码放入appdelegate中。这就是ViewController的用途。如果所有ViewController都有共同的功能,我建议将UIViewController子类化(然后从该子类派生所有其他实例)或在其上编写一个类别


另一方面,appdelegate是触发与应用程序寿命相关的基本事件的好地方,如设置核心数据上下文或在应用程序即将进入后台时保存应用程序状态。

如果您在
viewDidLoad
中尝试执行的操作是正确的“返回”在
UINavigationController
中的按钮,您不需要这样做。只需根据需要定义控制器的
title
属性即可。控制器的
init
方法可以实现这一点(在这种情况下,不需要
viewDidLoad

self.title = @"CHANGE";
也可以在appDelegate中进行设置:

controller.title = @"CHANGE";
至于您的另一个问题,最好是从头开始,使用基于视图或基于窗口的项目模板

否则,您是完全正确的:您可以从appDelegate中释放不需要的预定义控制器,并创建自己的控制器。此外,您应该注意从父控制器中删除所有这些控制器的视图:

 [controller.view removeFromSuperview];
(对于您删除的每个控制器,并且在代理中有一个
[self.window addSubview]
,可能只有
UiNavigationController


无论如何,我不知道我是否可以建议这个路径,因为您还需要修复与xib文件相关的所有依赖项,这会让您感到有些头疼。

实际上是有一个第二个按钮,它会将您带到应用程序的设置屏幕,我通过将导航控制器弹出到索引0(警报)来实现这一点bit只是我在测试Tanks时输入的一些代码,只是需要继续进行一些实验,它最终会安装到位。