相关疑难解决方法(0)

swift中的awakeFromNib()和viewDidLoad()之间的区别

我想知道awakeFromNib()和viewDidLoad()之间的关键区别,以便更清楚地了解它是如何工作的.请有人解释一下吗?

viewdidload awakefromnib swift

29
推荐指数
1
解决办法
2万
查看次数

为什么我的awakeFromNib不会开火?

我开始将更多的视图层次结构移动到IB.

我有一个名为"AlignmentViewController.xib"的nib文件,我在其中使用AlignmentViewController作为文件所有者设置我的视图层次结构.这很好用.

我仍然模糊的方法之一是awakeFromNib.在AlignmentViewController的以下代码片段中,我添加了一个额外的方法awakeFromNib.但是,它不会被调用:

- (void)awakeFromNib {

   NSLog(@"AlignmentViewController - awakeFromNib");
   [super awakeFromNib];

}

- (id)initWithChromosomeName:(NSString *)chromosomeName 
               basepairStart:(NSUInteger)basepairStart 
                 basepairEnd:(NSUInteger)basepairEnd {

    self = [self initWithNibName:@"AlignmentViewController" bundle:nil];

    if (nil != self) {


        self.title          = @"Alignment";

        self.chromosomeName = chromosomeName;
        self.basepairStart  = basepairStart;
        self.basepairEnd    = basepairEnd;

        self.wantsFullScreenLayout = YES;

    }

    return self;
}
Run Code Online (Sandbox Code Playgroud)

有人能为我澄清我在这里错过了什么吗?

干杯,道格

更新:在阅读了一些答案后,我意识到我需要深入了解非常基本的东西.

看初始化:

- (id)initWithChromosomeName:(NSString *)chromosomeName 
               basepairStart:(NSUInteger)basepairStart 
                 basepairEnd:(NSUInteger)basepairEnd {

    self = [self initWithNibName:@"AlignmentViewController" bundle:nil];
Run Code Online (Sandbox Code Playgroud)

我注意到我正在调用initWithNibName:bundle:indirect.这是不好的做法吗?AlignmentViewController.xib文件定义了我的视图层次结构.但我不是真的使用initWithNibName:bundle:以典型的方式?有一个更好的方法吗?

iphone interface-builder xib nib

13
推荐指数
2
解决办法
2万
查看次数

在awakeFromNib中访问View?

我一直在尝试在awakeFromNib中设置UIImageView背景颜色(见下文)

[imageView setBackgroundColor:[UIColor colorWithRed:0 green:0 blue:0 alpha:1.0]];
Run Code Online (Sandbox Code Playgroud)

当它不起作用时,我意识到它可能是因为视图尚未加载,我应该将颜色更改移动到viewDidLoad.

我可以证实我有这个权利吗?

加里

EDIT_002:

我刚开始一个新项目,从一个干净的开始检查这一点.我像往常一样设置视图.结果是控件确实在awakeFromNib中设置为(null).这是我有的:

码:

@interface iPhone_TEST_AwakeFromNibViewController : UIViewController {
    UILabel *myLabel;
    UIImageView *myView;
}
@property(nonatomic, retain)IBOutlet UILabel *myLabel;
@property(nonatomic, retain)IBOutlet UIImageView *myView;
@end
Run Code Online (Sandbox Code Playgroud)

.

@synthesize myLabel;
@synthesize myView;

-(void)awakeFromNib {
    NSLog(@"awakeFromNib ...");
    NSLog(@"myLabel: %@", [myLabel class]);
    NSLog(@"myView : %@", [myView class]);
    //[myLabel setText:@"AWAKE"];
    [super awakeFromNib];

}

-(void)viewDidLoad {
    NSLog(@"viewDidLoad ...");
    NSLog(@"myLabel: %@", [myLabel class]);
    NSLog(@"myView : %@", [myView class]);
    //[myLabel setText:@"VIEW"];
    [super viewDidLoad];
}
Run Code Online (Sandbox Code Playgroud)

OUTPUT:

awakeFromNib ...
myLabel: (null)
myView : …
Run Code Online (Sandbox Code Playgroud)

iphone cocoa-touch objective-c

10
推荐指数
1
解决办法
1万
查看次数

viewDidLoad和awakeFromNib时序

据我所知,awakeFromNib将始终在viewDidLoad之前调用.

所以我有一个UITableViewController的子类,它是从xib文件中取消归档的.

我在里面定义了这两个方法:

- (void)awakeFromNib {
  [super awakeFromNib];
  NSLog(@"awake from nib");
}

- (void)viewDidLoad {
  [super viewDidLoad];
  NSLog(@"view did load");
}
Run Code Online (Sandbox Code Playgroud)

会发生什么是"视图确实加载"出现在控制台中"从笔尖唤醒"之前.我试图在[超级awakeFromNib]上使用断点,并反复点击F7(Step Into),令我惊讶的是,它进入 - (void)viewDidLoad之前进入awakeFromNib内的第二行.

有谁知道这里发生了什么?我在常规UIViewController的子类中做了完全相同的事情,并且日志语句被反转,正如我最初期望的那样......

iphone uitableview viewdidload ipad awakefromnib

10
推荐指数
3
解决办法
2万
查看次数

解释awakeFromNib,initwithFrame用法

我正在浏览iTunes上的斯坦福iphone开发讲座,并在第5讲中遇到了这个问题.我们正在努力确保在设备旋转时进行重绘.我有两个与此相关的问题:

  1. 什么是awakeFromNib,在其余代码中没有调用此方法,它是如何触发的?
  2. initwithFrame中的代码是做什么的?

谢谢.

-(void)setup 
{
      self.contentMode = UIViewContentModeRedraw;
}

-(void)awakeFromNib
{
    [self setup];
}

-(id)initWithFrame:(CGRect)frame
{
     self=[super initWithFrame:frame];
     if (self) {
        [self setup];
     }
     return self;
}
Run Code Online (Sandbox Code Playgroud)

objective-c

7
推荐指数
2
解决办法
4774
查看次数

awakeFromNib、applicationWillFinishLaunching 和 applicationDidFinishLaunching 的顺序?

假设有一个默认的 Xcode Cocoa 应用程序模板,其中 App Delegate 位于主 XIB 文件中。

当然applicationWillFinishLaunching:是之前调用的applicationDidFinishLaunching:

之前为什么会awakeFromNib被叫? applicationWillFinishLaunching:

文档是applicationWillFinishLaunching:这样说的:

在应用程序对象初始化之前由默认通知中心发送。

为什么这与之前awakeFromNib被调用并不矛盾? applicationWillFinishLaunching:

我可以信赖这个订单吗?

cocoa objective-c

3
推荐指数
1
解决办法
2168
查看次数