viewcontroller中appdelegate和delegate的区别

Posted

技术标签:

【中文标题】viewcontroller中appdelegate和delegate的区别【英文标题】:difference between appdelegate and delegate in viewcontroller 【发布时间】:2011-12-04 18:35:37 【问题描述】:

我想将一个示例代码与我的 iPhone 应用程序(例如 SampleCode 项目)集成。在 firstViewController 中的示例代码中添加到 MainWindow.xib 并链接到在以下代码中创建的viewController

@interface SampleCodeAppDelegate : NSObject <UIApplicationDelegate> 
    UIWindow *window;
    firstViewController *viewController;


@property (nonatomic, retain) IBOutlet UIWindow *window;
@property (nonatomic, retain) IBOutlet firstViewController *viewController;

和 viewController 用 initWithCoder 实例化,当 firstView 出现在按钮上时,可以通过调用 OpenCamera 方法打开相机,如下面的代码所示。

//in firstViewController.mm file

- (id)initWithCoder:(NSCoder *)coder 

    if (self = [super initWithCoder:coder]) 

    

    [self initLocal];

    return self;

//to open camera in SampleCode application
    - (IBAction)OpenCamera 

        UIApplication *app = [UIApplication sharedApplication];
        SampleCodeAppDelegate* delegate = [app delegate];
        UIViewController* uiViewCont = [delegate viewController];
        ((CCamera*)m_pCamera)->Camera(uiViewCont);
    

在我的基于导航的应用程序 (MyApplication) 中,我想直接使用 viewController MyApplicationViewControllerA 之一调用 SampleCode 的 firstViewController,而不添加到 MyApplicationAppDelegate。

所以如果我在 MyApplicationViewControllerA viewController 中创建委托,我希望它应该作为 SampleCode 应用程序中的 appdelegate。 我无法打开相机,但在关闭相机后,我无法打开 MyApplication 的任何其他视图,但 MyApplicationViewControllerA 除外。 我正在尝试 pushViewController 和 modalViewController 无法呈现其他视图。

我对委托并不感到困惑。所以我想知道 AppDelegate(in SampleCodeAppDelegate : NSObject &lt;UIApplicationDelegate&gt;) 和其他 ViewContrller 中声明的委托有什么区别。

【问题讨论】:

[self initLocal];应该在您的“if (self = [super init...)”块内。如果超级初始化失败,你不想尝试设置你的对象;只需返回 self(这将是 nil)。 【参考方案1】:

我正在尝试 pushViewController 和 modalViewController 无法呈现其他视图。

答案: 如果您无法在相机覆盖屏幕后显示其他视图,那么我认为您需要通过使用 performSelectorOnMainThread 在主线程上执行操作来显示其他视图

[self performSelectorOnMainThread:@selector(showOtherView) withObject:OtherViewControllerObj waitUntilDone:YES];

首先在 showOtherView 选择器方法中,您需要确认您应该在 navigationconroll 中推送 viewconroller,如果已经推送,那么您应该尝试使用 presentModalViewController 显示 otherview,如下面的代码。

-(void)showOtherView

[self.navigationController pushViewController:OtherViewControllerObj animated:YES];

[self presentModalViewController:OtherViewControllerObj animated:YES]; 


我认为这应该可行。

【讨论】:

以上是关于viewcontroller中appdelegate和delegate的区别的主要内容,如果未能解决你的问题,请参考以下文章

堆内存在增长

核心数据值返回 Nil

Cordova iOs 错误

如何删除 iOS 通知服务扩展中的文件?

如何在目标 c 中引用 swift app 委托

在不同的 ViewController 中切换到新的 ViewController?