Ios UIView:从自定义XIB加载导致崩溃

Ios UIView:从自定义XIB加载导致崩溃,ios,xcode,uiview,crash,xib,Ios,Xcode,Uiview,Crash,Xib,你好,斯塔克 我正在尝试设置一个UIView,以便它从XIB Xcode中的文件 为此,我完成了以下初始步骤: 创建了空的UIView子类 添加了一个空白的XIB文件 然后,我将所有需要的子视图添加到XIB文件中,并在UIView子类中创建相应的IBOutlet属性 我观看了演示如何正确连接插座并设置文件所有者。视频指导我做以下事情: 不要在XIB中将UIView类设置为子类 在XIB中将文件的所有者设置为UIView子类: 在UIView类型的UIView类中插入一个IBOutlet,以

你好,斯塔克

  • 我正在尝试设置一个
    UIView
    ,以便它从
    XIB
    Xcode中的文件
为此,我完成了以下初始步骤:

  • 创建了空的
    UIView
    子类
  • 添加了一个空白的
    XIB
    文件 然后,我将所有需要的子视图添加到
    XIB
    文件中,并在
    UIView
    子类中创建相应的
    IBOutlet属性

    我观看了演示如何正确连接插座并设置文件所有者。视频指导我做以下事情:

    • 不要在
      XIB
      中将UIView类设置为子类
    • XIB
      中将
      文件的所有者设置为
      UIView
      子类:
    • 在UIView类型的UIView类中插入一个IBOutlet,以便可以将XIB文件加载到该类中
    • 如果要在另一个
      XIB
      文件中初始化自定义
      UIView
      ,请覆盖
      initWithCoder
    • 如果要在另一个类文件中以编程方式初始化自定义
      ui视图
      ,请重写
      initWithFrame
    很酷,我已经完成了所有这些事情,并且选择以编程方式初始化我的
    UIView

    请参阅我的
    ui视图
    子类实现文件

    #import "CXHostsTableViewCellContentView.h"
    
    @implementation CXHostsTableViewCellContentView
    
    
    
    #pragma mark Custom Initializers
    
    -(instancetype)initWithFrame:(CGRect)frame
    {
        self = [super initWithFrame:frame];
        if (self)
        {
            [[NSBundle mainBundle]loadNibNamed:@"CXHostsTableViewCellContentView" owner:self options:nil];
            [self setBounds:self.view.bounds];
            [self addSubview:self.view];
        }
        return self;
    }
    
    -(instancetype)initWithCoder:(NSCoder *)aDecoder
    {
        self = [super initWithCoder:aDecoder];
        if (self)
        {
            [[NSBundle mainBundle]loadNibNamed:@"CXHostsTableViewCellContentView" owner:self options:nil];
            [self addSubview:self.view];
        }
        return self;
    }
    
    #import <UIKit/UIKit.h>
    #import "CXStyleView.h"
    
    @interface CXHostsTableViewCellContentView : UIView
    
    #pragma mark UIView Properties
    @property (strong, nonatomic) IBOutlet UIView *view;
    
    @property (nonatomic,weak)IBOutlet UIView *standardView;
    
    @end
    
    当然,我的头文件

    #import "CXHostsTableViewCellContentView.h"
    
    @implementation CXHostsTableViewCellContentView
    
    
    
    #pragma mark Custom Initializers
    
    -(instancetype)initWithFrame:(CGRect)frame
    {
        self = [super initWithFrame:frame];
        if (self)
        {
            [[NSBundle mainBundle]loadNibNamed:@"CXHostsTableViewCellContentView" owner:self options:nil];
            [self setBounds:self.view.bounds];
            [self addSubview:self.view];
        }
        return self;
    }
    
    -(instancetype)initWithCoder:(NSCoder *)aDecoder
    {
        self = [super initWithCoder:aDecoder];
        if (self)
        {
            [[NSBundle mainBundle]loadNibNamed:@"CXHostsTableViewCellContentView" owner:self options:nil];
            [self addSubview:self.view];
        }
        return self;
    }
    
    #import <UIKit/UIKit.h>
    #import "CXStyleView.h"
    
    @interface CXHostsTableViewCellContentView : UIView
    
    #pragma mark UIView Properties
    @property (strong, nonatomic) IBOutlet UIView *view;
    
    @property (nonatomic,weak)IBOutlet UIView *standardView;
    
    @end
    

    我真的不知道如何解决这个问题,因为我确信我正确地遵循了所有这些步骤。我在谷歌上搜索了一下,发现其中有相同的症状,但答案与我使用的代码完全相同,而且回答前后矛盾


    我不知道现在该怎么办,也不知道是什么导致了这次事故。我知道,如果我根本没有连接的插座,它就会工作。但话说回来,也没有显示任何内容

    我认为在为scrollContentView对象分配内存时,您将面临这个问题。 所以,尝试使用帧分配内存

    i、 e 将此文件写入.m文件中

    - (void)myAllocation {
                  
      //do your stuff
                
    }
            
    -  (id)initWithFrame:(CGRect)aRect {
               
       self = [super initWithFrame:aRect];
            
       if (self) {
          [self myAllocation];
       }
            
       return self;
            
    }
            
     - (id)initWithCoder:(NSCoder*)aDecoder {
               
       self = [super initWithCoder:aDecoder];
       if (self) {
          [self myAllocation];
       }
            
       return self;
            
    }
    


    我认为在为scrollContentView对象分配内存时,您将面临这个问题。 所以,尝试使用帧分配内存

    i、 e 将此文件写入.m文件中

    - (void)myAllocation {
                  
      //do your stuff
                
    }
            
    -  (id)initWithFrame:(CGRect)aRect {
               
       self = [super initWithFrame:aRect];
            
       if (self) {
          [self myAllocation];
       }
            
       return self;
            
    }
            
     - (id)initWithCoder:(NSCoder*)aDecoder {
               
       self = [super initWithCoder:aDecoder];
       if (self) {
          [self myAllocation];
       }
            
       return self;
            
    }
    


    您可能需要在崩溃后继续执行,并向我们提供您在控制台中看到的内容(堆栈跟踪、异常详细信息等)@mohamede1945关于内存地址的信息非常有限。不知道名字,也不知道数字。嗨@Owatch,你修好了吗?我目前正在经历这种情况。您可能需要在崩溃后继续执行,并向我们提供您在控制台中看到的内容(堆栈跟踪、异常详细信息等)。@mohamede1945关于内存地址的信息非常有限。不知道名字,也不知道数字。嗨@Owatch,你修好了吗?我目前正在经历这种情况。我不明白你的回答,我的分配是多少?这是如何解决我的问题的?您好Owatch,您能给我发送这个示例/演示项目吗?所以,我可以帮你。我会在两小时后把它贴在这里。这是一个链接,意外地把它给了之前评论过的其他人。我的错。要模拟崩溃,只需打开应用程序并尝试访问菜单上的“主机”屏幕。我不明白你的回答,我的分配是什么?这是如何解决我的问题的?您好Owatch,您能给我发送这个示例/演示项目吗?所以,我可以帮你。我会在两小时后把它贴在这里。这是一个链接,意外地把它给了之前评论过的其他人。我的错。要模拟崩溃,只需打开应用程序并尝试访问菜单上的“主机”屏幕。