Iphone 未使用presentModalDialog方法调用viewDidLoad方法

Iphone 未使用presentModalDialog方法调用viewDidLoad方法,iphone,cocoa-touch,Iphone,Cocoa Touch,我正在使用presentModalDialog显示viewcontroller的视图,但是从未调用viewDidLoad 是否有调用的方法可以放置填充和配置视图的逻辑 编辑: 放少量代码有点困难,您需要查看所有代码,但下面是: 我有两个NIB和两个视图控制器,它们都继承自一个基类,该基类具有逻辑和IBOutlet。这是为了允许我重复使用代码。当主控制器中的方向发生变化时,它会在两个控制器模式对话框之间切换,这两个对话框依次使用各自的nib,但它们都使用相同的基本代码来配置UI项 @impleme

我正在使用presentModalDialog显示viewcontroller的视图,但是从未调用viewDidLoad

是否有调用的方法可以放置填充和配置视图的逻辑

编辑:

放少量代码有点困难,您需要查看所有代码,但下面是:

我有两个NIB和两个视图控制器,它们都继承自一个基类,该基类具有逻辑和IBOutlet。这是为了允许我重复使用代码。当主控制器中的方向发生变化时,它会在两个控制器模式对话框之间切换,这两个对话框依次使用各自的nib,但它们都使用相同的基本代码来配置UI项

@implementation HomeViewControllerBase

- (void)configureBestSellItems
{
    [self startRetrievingRegions];

    // load all the images from our bundle and add them to the scroll view
    //  NSUInteger i;
    for (int i = 0; i <= 150; i++)
    {
        NSString *imageName = @"tempImage.jpg";
        UIImage *image = [UIImage imageNamed:imageName];
        UIImageView *imageView = [[UIImageView alloc] initWithImage:image];

        // setup each frame to a default height and width, it will be properly placed when we call "updateScrollList"
        CGRect rect = imageView.frame;
        rect.size.height = kScrollObjHeight;
        rect.size.width = kScrollObjWidth;
        imageView.frame = rect;
        imageView.tag = i;  // tag our images for later use when we place them in serial fashion
        [self.bestSellScrollView addSubview:imageView];
        [imageView release];
    }

    [self layoutScrollImages];  // now place the photos in serial layout within the scrollview
}


// Implement viewDidLoad to do additional setup after loading the view, typically from a nib.
- (void)viewDidLoad
{
    [super viewDidLoad];
    [self configureBestSellItems];
}

@end

@interface HomeViewController : HomeViewControllerBase
{

}

@interface HomeViewController_Landscape : HomeViewControllerBase
{

}

@implementation HomeViewController

//This works for portrait
- (void)viewDidLoad
{
    [super viewDidLoad];
}

@end

@implementation HomeViewController_Landscape

//This does not work
- (void)viewDidLoad
{
    [super viewDidLoad];
}

//This works as suggested
- (void)awakeFromNib
{
    [super configureBestSellItems];
}

@end

您可以在viewcontroller中尝试以下操作:

-(void)awakeFromNib
{
   [super awakeFromNib];
   // your code here
}

但是,您应该尝试找出从未调用viewDidLoad的原因。你也可以检查这个
.

您可能在其中有一个名为presentModalDialog:的自定义功能,因为搜索苹果的文档没有该功能。您正在调用加载Xib的自定义函数

我也在做同样的事情

你想要这个:

[self presentModalViewController:controller...

ViewDidLoad由控制器调用,如果调用awakeFromNib,您可能会得到视图本身。

这是目标c中的一个常见问题: 您应该查看以下内容:

1-启动视图控制器您应该在应用程序委托中以正确的方式初始化它。
2-查看视图的文件所有者它必须是正确的类,通常与uiview同名。

您能提供一些代码吗?听起来很奇怪,您是否记得调用viewDidLoad的超类实现?+1来发布一些代码。viewDidLoad将始终被调用,因此在您的实现中会出现一些问题。@Andreas-我添加了一些代码,我很想听听您的意见您提供的代码似乎有错误。。。你的应用程序启动正确吗?在超级调用之后,您可能已经在基本控制器和派生控制器中使用NSLog进行了测试?我真的不喜欢这个答案。awakeFromNib可以工作,但是viewwillbeen会产生不希望的副作用,因为视图可能会在不需要重新加载的情况下出现/消失。最好弄清楚为什么不调用viewDidLoad。很难说没有看到一些代码。这是在加载视图时修改视图的正确位置。我不喜欢awakeFromNib的另一个原因是它特定于使用IB。如果您和我一样,最终决定以编程方式创建所有视图,awakeFromNib将不再被调用。如果您修复并使用viewDidLoad,则在用loadView替换IB创建的代码后,您不必更改代码。如果你确实尝试使用awakeFromNib,请确保将[super awakeFromNib]作为第一行。这很有效,但我很想听听@XJones对我编辑的文章的看法
[self presentModalViewController:controller...