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

时间:2015-09-12 12:48:08

标签: ios xcode uiview crash xib

Hello StackOverflow。

  • 我正在尝试设置UIView,以便从XIB加载自己 Xcode中的文件。

为此,我完成了以下初步步骤:

  1. 创建空UIView子类。
  2. 添加了空白XIB文件。
  3. 然后,我将所需的所有子视图添加到XIB文件中,并在IBOutlet Properties子类中添加了相应的UIView

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

    • 不要在XIB中将UIView类设置为子类。 Time link
    • File's Owner设置为UIView中的XIB子类:Time Link
    • 将IBOutlet插入UIView类型的UIView类中,以便您的XIB文件可以加载到该类中。Time link
    • 如果您打算在另一个initWithCoder文件中初始化自定义UIView,请覆盖XIB like (image)
    • 如果您打算在另一个类文件中以编程方式初始化自定义initWithFrame ,请覆盖UIView like (image)

    很酷,我已经做了所有这些事情,并选择以编程方式初始化UIView

    请参阅我的UIView子类实施文件

    #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
    

    我还有一个image here个XIB文件的所有者和IBOutletUIView链接,从CXHostsTableViewCellContentView *scrollContentView = [[CXHostsTableViewCellContentView alloc]init]; 基地到文件所有者的商店。

    是的,所以一切看起来都不错,运行这个应该没问题吗?

    不,每当我初始化这个子视图并呈现它时,我都会崩溃:

    while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
        //...
    }
    

    another

    我真的不知道如何解决这个问题,因为我确信我正在遵循所有这些步骤。我用谷歌搜索并遇到Screenshot of exception,它有相同的症状,但答案与我正在使用的代码相同,而this question的答案相互矛盾。

    我不知道此时该怎么做,或者导致崩溃的原因。我知道,如果我没有连接任何插座,它就有效。但话说回来,也没有任何表现。

1 个答案:

答案 0 :(得分:0)

我认为当您为scrollContentView对象分配内存时,您将遇到问题。 所以,尝试用Frame分配内存。

在.m文件中写下

  • (无效)myAllocation {

    //做你的东西

}

  • (ID)initWithFrame:方法(的CGRect)aRect {

    self = [super initWithFrame:aRect];

    if(self) {     [self myAllocation]; }

    返回自我;

}

  • (ID)的initWithCoder:(NSCoder *)aDecoder {

    self = [super initWithCoder:aDecoder]; 如果(自我) {     [self myAllocation]; }

    返回自我;

}

CXHostsTableViewCellContentView * scrollContentView = [[CXHostsTableViewCellContentView alloc] initWithFrame:CGRectMake(0,10,0,20)];