Xcode - проблема предупреждения - PullRequest
0 голосов
/ 08 июня 2011

У меня есть контроллер навигации, который использует оператор if для переключения между различными представлениями, и когда я его запускаю, в строке появляется предупреждение:

ROSS_APP_7AppDelegate *delegate = [[UIApplication sharedApplication] delegate];

предупреждение: тип 'id' не соответствует протоколу 'UITabBarControllerDelegate'

Мне нужна помощь, чтобы избавиться от этого предупреждения. Вот все утверждение if:

if(indexPath.row == 0)
{
    MapDetailController *mapD = [[MapDetailController alloc] initWithNibName:@"MapDetailController" bundle:nil];
    self.mapDetailController = mapD;
    [mapD release];

    mapDetailController.title = [NSString stringWithFormat:@"%@", [moreArray objectAtIndex:row]];

    ROSS_APP_7AppDelegate *delegate = [[UIApplication sharedApplication] delegate];
    [delegate.moreNavController pushViewController:mapDetailController animated:YES];


}

Спасибо

EDIT: Вот как выглядит мой AppDelegate (ответ на ответ № 2)

#import <UIKit/UIKit.h>
@class MoreNavController;
@interface ROSS_APP_7AppDelegate : NSObject <UIApplicationDelegate, UITabBarControllerDelegate> {
UIWindow *window;
IBOutlet UITabBarController *tabBarController;
IBOutlet MoreNavController *moreNavController;
}


@property (nonatomic, retain) IBOutlet UIWindow *window;
@property (nonatomic, retain) IBOutlet UITabBarController *tabBarController;
@property (nonatomic, retain) IBOutlet MoreNavController *moreNavController;
@end

Ответы [ 2 ]

3 голосов
/ 08 июня 2011

Возможно, вы забыли, чтобы ваш делегат приложения соответствовал протоколу UITabBarControllerDelegate.

Для его реализации заголовок вашего appDelegate должен выглядеть следующим образом (объявление @interface - это соответствующая строка):

#import ...

@interface ROSS_APP_7AppDelegate : AppDelegate_Shared <UITabBarControllerDelegate> 
{
    ....
}

@property(nonatomic, retain) .....

@end

Возможно, вы используете AppDelegate_Shared / AppDelegate_iPhone / AppDelegate_iPad, поэтому имейте в виду, что в приведенном выше примере рассматривается делегат общего приложения

РЕДАКТИРОВАТЬ:

После просмотра вашего комментария,

Попробуйте заменить:

ROSS_APP_7AppDelegate *delegate = [[UIApplication sharedApplication] delegate];

С помощью этого:

ROSS_APP_7AppDelegate *delegate = (ROSS_APP_7AppDelegate*)[[UIApplication sharedApplication] delegate];

Может ли приведение типа возврата таким образом избавить вас от предупреждения?

0 голосов
/ 08 июня 2011

Вы пытались разыграть делегата как:

(id)[[UIApplication sharedApplication] delegate];

???

...