0

Я разработал небольшое приложение для iPhone, используя одноэлементный ядро, которое я использую для навигации по представлениям. Вот пример метода из моего одноэлементного класса.iPhone: использование Singleton с контроллером табуляции и контроллером навигации

+ (void) loadMenuController:(NSMutableArray *)menuItems{ 
    MenuViewController *menuViewControler = [[MenuViewController alloc] initWithNibName:@"MenuViewController" bundle:nil]; 
    [menuViewControler setMenuItems:menuItems]; 
    RootViewController *root = (
    P2MAppDelegate *appDelegate = (P2MAppDelegate*) [[UIApplication sharedApplication] delegate]; 
    UINavigationController *navController = [appDelegate navigationController]; 
    [navController pushViewController:menuViewControler animated:YES]; 
    [menuViewControler release]; 
} 

Теперь мое требование изменилось, чтобы потребоваться контроллер представления табуляции. Я могу изменить делегат приложения на контроллер табуляции, но мне все равно нужно перемещаться внутри каждой вкладки. Я не могу понять, как перейти от моего одноэлементного класса.

Прошу вас, руководствоваться. Пожалуйста, дайте мне знать, если мой запрос не ясен.

Заранее спасибо.

С уважением, Malleswar

+1

Пожалуйста, переформатируйте для ясности. Кроме того, «singleton» - это одно слово. –

ответ

0

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

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

Посмотрите на предлагаемые Apple проекты шаблонов в Xcode, чтобы увидеть быстрый и грязный способ структурирования приложений, созданных вокруг навигации и/или вкладок.

Одиночные игры следует использовать только в том случае, если вы должны обеспечить, чтобы один и только один экземпляр класса был жив в одно время. Вам не нужно создавать собственный синглтон для управления пользовательским интерфейсом. Делегат приложения прикреплен к объекту приложения, который сам по себе является одиночным. Это означает, что делегат приложения предоставляет все ограничения для класса для пользовательского интерфейса, который вам может понадобиться. Кроме того, вам не нужен еще один сингл.

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

+0

Спасибо за ответ. Это действительно красивое описание. Фактически для доступа к веб-службе я использовал доступ к службам, основанным на событиях. Как didReceiveResponse, didReceiveData, connectionDidFinishLoading. Когда он достигает connectiondidfinishloading, я обращаюсь к одному классу тонны и отображает следующий контроллер. Можете ли вы предложить мне любой другой доступ к веб-сервису, чтобы я мог избежать доступа к контроллерам в однопользовательском классе. Заранее спасибо. – user304804

+0

Да, используйте делегат, который будет уведомлен о завершении ответа. –

+0

Но я не хочу ждать подключенияDidFinishLoading. Его событие основано. Я хочу просто вызвать метод запроса, и этот метод должен вернуть ответ. – user304804

Смежные вопросы