I create a XIB.
I create this class called MyCustomView and assign it to the XIB's File Owner.
- (instancetype)initWithCoder:(NSCoder *)aDecoder{
  self = [super initWithCoder:aDecoder];
  if (self) [self load];
  return self;
}
- (instancetype)initWithFrame:(CGRect)frame {
  self = [super initWithFrame:frame];
  if (self) [self load];
  return self;
}
- (void)load {
  NSArray* topLevelObjects;
  [[NSBundle mainBundle] loadNibNamed:@"MyCustomView"
                                owner:self
                      topLevelObjects:&topLevelObjects];
  NSView* view;
  for (id aView in topLevelObjects) {
    if ([umaVista isKindOfClass:[NSView class]]) {
      view = umaVista;
      break;
    }
  }
  [self addSubview:view];
  view.frame = self.bounds;  
}
I create a NSView on the main app.
I change that view to the MyCustomView.
I run the app. MyCustomView's initWithCoder does not run. initWithFrame does not run. awakeFromNib does not run. 
Nothing happens.
Any ideas?
                        
"File's Owner" as I've written elsewhere, isn't a real object in the archive. It's a placeholder. When you unpack the nib, a pre-existing object gets used.
It looks like you should just be putting an instance of your custom view into the nib. Don't make it File's Owner, just drag a view out from the object palette and then change its class in the Identity Inspector (right pane, top; press ⌘-⌥-3). Build the subviews in the nib too.
Then get your
NSBundleto load the nib for you. Your custom view will getinitWithCoder:andawakeFromNib, and you won't have to grovel through the hierarchy to find a particular subview.