Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 无法在带有NSObject的单独ViewController中加载UIView_Iphone_Uiview_Uiviewcontroller_Bind_Nsobject - Fatal编程技术网

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

Iphone 无法在带有NSObject的单独ViewController中加载UIView,iphone,uiview,uiviewcontroller,bind,nsobject,Iphone,Uiview,Uiviewcontroller,Bind,Nsobject,该应用程序是基于视图的项目类型。 我在视图XIB(UIView Nib)中使用NSObject,假设该对象是应用程序的顶部栏 MainController UIViewController加载初始屏幕。 看起来是这样的, 我想加载上图中topbarview(红色)中单独设计的顶视图(新视图,称为X) 现在,我有一个NSObject,它驻留在“X”中,绑定所有事件,并对X拥有完全控制权,它是一个单例对象 在NSObject类中,我有一个方法返回self对象实例和它控制的uiview(“X”)实例

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

MainController UIViewController加载初始屏幕。 看起来是这样的,

我想加载上图中topbarview(红色)中单独设计的顶视图(新视图,称为X)

现在,我有一个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(“X”),必须位于主视图控制器的topbarview中(上图中的红色部分)

我在主视图控制器中编写了一个方法,如下所示:

-(void)SetHomeScreen
{
    self.topView = [[TopBarObject GetTopBarObject] ReturnTopBarView];
}
我在appdelegate.applicationdFinishLaunching中调用
-(void)SetHomeScreen
,作为
[viewcontroller SetHomeScreen]

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

我有一个自定义顶部栏和自定义底部栏的图像和图标。所以我选择了这种设计方式。
我不确定这是否是最好的方式,我只是在寻找一个最优化的系统设计,使这项工作效率。如果你认为还有其他方法比这好得多,请与我分享。

我发现单身是不正确的。 应该是这样的:

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

在您的代码中,topBarObject从未启动,因此每次调用GetTopBarObject时,它都会生成一个新的topBarObject并返回它…

它在appdelegate.ApplicationIDFinishLaunching中的哪个位置被调用?
如果您在视图实际设置之前调用,那么您所做的就是用一些东西设置nil
试试看
viewcontroller.view
之前

[viewcontroller SetHomeScreen]

ya,你说得对。我刚才注意到了。谢谢。但这并不能解决问题,对吗?如果我错了,请纠正我。我认为这应该能解决问题。您可以在“ReturnTopBarView”方法中写入“ReturnTopBarObject.topBarView;”,但topBarObject根本没有启动。顺便问一下,为什么要直接返回“topBarObject.topBarView”而不是“topBarView”这不是一个静态的方法…是的,这是一个问题,让我有了一些想法。。但你认为这总体上是正确的实施方式吗。。在你的问题之后,我现在收到了这个问题?你能帮我建议正确的结构吗?如果所有屏幕的顶部都保持不变,那么有两个好的做法:(1)像你一样,(2)创建一个始终处于活动状态的主视图,并使导航控制器的视图成为此主视图的子视图。在第二个选项中,当在屏幕之间切换时,公共部分将保持静态…是的,控制器现在有了视图。。。但我是否遵循了正确的模式?这是一种加载应用程序的方式,它在应用程序中有一个自定义的顶部和底部栏吗?请带我到这里