无法在具有NSObject的单独ViewController中加载UIView

时间:2010-01-24 21:31:45

标签: iphone uiview uiviewcontroller bind nsobject

该应用是基于视图的项目类型。 我在View XIB(UIView Nib)中使用NSObject,假设此对象是应用程序的顶部栏。

MainController UIViewController加载初始屏幕。 它看起来像这样,

UIViewController MainViewController Image

我想加载一个顶视图(新视图,称之为X)在上图中的顶部视图(红色)中单独设计。

现在,我有NSObject驻留在“X”内并绑定所有事件并完全控制X,它是一个单例对象。

在NSObject类中,我有一个返回自身对象实例的方法和它控制的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;    
}

顶部视图是完全设计的顶部视图(“X”),它必须位于主视图控制器的顶部视图中(上图中的红色部分)。

我在主视图控制器中写了一个方法:

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

我在我的appdelegate.applicationdidfinishlaunching中调用-(void)SetHomeScreen[viewcontroller SetHomeScreen]

这实际上调用了NSObject(TopBarObject类)中的相应方法,但是我没有看到更新的视图 (mainviewcontroller.topbarview)。这是现在的主要问题。

我有一个自定义顶栏和自定义底栏,带有图像和图标。所以我选择了这种设计方式。 我不确定这是否是最好的方法,我只是在寻求最佳的系统设计,以使这项工作更有效率。如果您认为还有其他方法远远不如此,请与我分享。

2 个答案:

答案 0 :(得分:0)

我看到单身人士不正确。 它应该是这样的:

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

在你的代码中,topBarObject永远不会被启动,因此每次调用GetTopBarObject时它都会生成一个新的TopBarObject并返回它......

答案 1 :(得分:0)

appdelegate.applicationdidfinishlaunching在哪里调用?
如果您在视图实际设置之前进行呼叫,那么您所做的就是设置nil。
试试吧 viewcontroller.view; 之前 [viewcontroller SetHomeScreen]