IOS, снятие предупреждения? - PullRequest
0 голосов
/ 06 сентября 2011

Я пытаюсь удалить предупреждение из этой строки:

UIViewController * appController = [[[UIApplication sharedApplication] delegate]     viewController];

Предупреждение, которое я получаю для этой строки кода, следующее: "метод экземпляра 'viewController' не найден (тип возвращаемого значения по умолчанию равен 'id')

Может кто-нибудь помочь объяснить, как мне убрать это затухание?

Большое спасибо,

Ответы [ 4 ]

3 голосов
/ 06 сентября 2011

Вам необходимо разыграть делегата вашего приложения:

UIViewController * appController = [(MyAppDelegate *)[[UIApplication sharedApplication] delegate] viewController];
1 голос
/ 06 сентября 2011

Я не знаю, как называется ...AppDelegate, поэтому я использую DemoAppDelegate здесь.

UIViewController *appController = [(DemoAppDelegate *)[[UIApplication sharedApplication] delegate] viewController];
1 голос
/ 06 сентября 2011

Добавьте приведение к вашему делегату:

UIViewController * appController = [(MyAppDelegate *)[[UIApplication sharedApplication] delegate] viewController];
0 голосов
/ 06 сентября 2011

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

// MONApplicationDelegate.h
@interface MONApplicationDelegate : NSObject < UIApplicationDelegate >

// ...

+ (MONApplicationDelegate *)sharedApplicationDelegate;
- (UIViewController *)viewController;

@end

// MONApplicationDelegate.m
@implementation MONApplicationDelegate

// ...

+ (MONApplicationDelegate *)sharedApplicationDelegate
{
    id ret = [[UIApplication sharedApplication] delegate];
    if (nil == ret) {
        assert(0 && "oops - app delegate has not been created yet");
        return nil;
    }
    if (![ret isKindOfClass:[MONApplicationDelegate class]]) {
        assert(0 && "invalid class type for shared application delegate");
        return nil;
    }
    else {
        return ret;
    }
}

@end

// in action
UIViewController * appController =
  [[MONApplicationDelegate sharedApplicationDelegate] viewController];

// which is shorter and safer to use, when compared to:
UIViewController * appController =
  [(MONApplicationDelegate*)[[UIApplication sharedApplication] delegate] viewController];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...