2010-01-24 1 views
1

Приложение представляет собой вид проекта на основе представления. Я использую NSObject в представлении XIB (UIView Nib), предположим, что этот объект является верхней панелью приложения.Невозможно загрузить UIView в отдельном ViewController с NSObject

MainController UIViewController загружает начальный экран. это выглядит так,

UIViewController MainViewController Image

я хотел загрузить Вид сверху (новый, назовем его X) Предназначен отдельно в topbarview (красного цвета) в изображении выше.

Теперь у меня есть NSObject, который находится внутри «X» и связывает все события и имеет полный контроль над X, его одноэлементным объектом.

в классе NSObject У меня есть способ вернуть экземпляр объекта self и экземпляр uiview ("X"), который он контролирует.

Эти методы,

-(UIView*)ReturnTopBarView 
{ 
      NSLog(@"called 2"); 
    return topBarObject.topBarView; 
} 

//Provides the top bar instance to all the view controllers. 
//Singleton Implementation. 
+ (id)GetTopBarObject 
{ 
    if(topBarObject == nil) 
    { 
     NSLog(@"called 1"); 
     return [[TopBarObject alloc] init]; 
    } 
    return topBarObject;  
} 

topbarview является полностью разработана topbarview («Х»), который должен прийти в topbarview главного контроллера вида (красного цвета сегмента на изображении выше).

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

-(void)SetHomeScreen 
{ 
    self.topView = [[TopBarObject GetTopBarObject] ReturnTopBarView]; 
} 

я призываю -(void)SetHomeScreen в моем appdelegate.applicationdidfinishlaunching, как [viewcontroller SetHomeScreen]

Это на самом деле вызывает соответствующие методы в NSObject (TopBarObject класса), но я не вижу, что представление обновлено в (mainviewcontroller.topbarview). Это главный вопрос сейчас.

У меня есть пользовательский верхний бар и пользовательская нижняя панель с изображениями и значками. Поэтому я выбрал этот способ проектирования. Я не уверен, что это лучший способ, я просто ищу оптимальный дизайн системы, чтобы сделать эту работу эффективной. Если вы считаете, что есть какой-то другой способ, который намного лучше, чем это, пожалуйста, поделитесь им со мной.

ответ

0

Я вижу, что синглтон неверен. Это должно быть что-то вроде этого:

+ (id)GetTopBarObject { 
    if(topBarObject == nil) { 
     topBarObject = [[TopBarObject alloc] init]; 
    } 
    return topBarObject; 
} 

В вашем коде topBarObject никогда не инициированы и поэтому каждый раз, когда GetTopBarObject называется он генерирует новый TopBarObject и возвращает его ...

+0

я, ты прав. Я заметил сейчас. Большое спасибо. Но это не решает проблему? пожалуйста, исправьте меня, если я ошибаюсь. – Futur

+0

Я думаю, что это должно решить проблему. Вы пишете «return topBarObject.topBarView»; в методе «ReturnTopBarView», но topBarObject не инициируется вообще. Кстати, почему вы возвращаете «topBarObject.topBarView», а не «topBarView» напрямую? - это не статический метод ... –

+0

ya thats вопрос ставит некоторые мысли в мой разум ... но вы думаете, что это правильная реализация в целом .. im, чтобы этот вопрос поднялся теперь после вашего вопроса? не могли бы вы помочь мне предложить правильную структуру .. – Futur

0

Где в appdelegate.applicationdidfinishlaunching это называется?
Если вы вызываете до того, как на самом деле настроено представление, все, что вы делаете, это установить нуль с чем-то.
Попробуйте viewcontroller.view; перед тем [viewcontroller SetHomeScreen]

+0

oh ok .. позвольте мне попробовать это сейчас .. – Futur

+0

Да, контроллер теперь имеет вид ... но я следую правильному шаблону? это способ загрузки приложения с пользовательской верхней и нижней панелью в приложении? пожалуйста, направляйте меня сюда – Futur

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

  • Нет связанных вопросов^_^