разница между appdelegate и делегатом в viewcontroller

Я хочу интегрировать один пример кода с моим приложением 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) я хочу вызвать firstViewController из SampleCode с одним из viewController MyApplicationViewControllerA напрямую, без добавления в MyApplicationAppDelegate.

Поэтому я хочу создать делегата в MyApplicationViewControllerA viewController, который должен работать как appdelegate в приложении SampleCode. Я не могу открыть камеру, но после закрытия камеры я не могу открыть любое другое представление MyApplication, кроме MyApplicationViewControllerA. Я пытаюсь pushViewController и modalViewController не отображать другой View.

Меня не смущает делегат. Поэтому я хочу знать, в чем разница между AppDelegate (в SampleCodeAppDelegate : NSObject <UIApplicationDelegate>) и делегатом, объявленным в другом ViewContrller.


person Community    schedule 04.12.2011    source источник
comment
[self initLocal]; должен находиться внутри вашего блока if (self = [super init ...). Если супер-инициализация завершилась неудачно, вы не хотите пытаться настроить свой объект; просто верните self (который будет равен нулю).   -  person occulus    schedule 05.12.2011


Ответы (1)


Я пытаюсь использовать pushViewController, а modalViewController не может отобразить другое представление.

ответ: если вы не можете отобразить другой вид после экрана наложения камеры, я думаю, вам нужно показать другое представление, выполнив действие в основном потоке с помощью performSelectorOnMainThread.

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

и в методе селектора showOtherView сначала вам нужно подтвердить, что вы должны нажать viewconroller в navigationconroll, и если он уже нажат, вы должны попытаться показать другое представление с помощью presentModalViewController, как показано ниже.

-(void)showOtherView{

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

[self presentModalViewController:OtherViewControllerObj animated:YES]; 

}

Я думаю, это должно сработать.

person User97693321    schedule 06.12.2011