UITextField floatValue加载Nib

时间:2014-12-12 12:17:02

标签: ios objective-c uitextfield xib

我有一个ViewController(VC1)实例化另一个ViewController(VC2)。 VC2有一些与IBOutlets链接的iVar。当我将UITextField链接到其ivar时,应用程序在加载nib期间崩溃并出现此错误:

  

***由于未捕获的异常终止应用程序' NSInvalidArgumentException',原因:' - [UITextField floatValue]:无法识别的选择器发送到实例

我真的不知道为什么会这样。 下面是代码:

VC1:

-(void)viewDidLoad
{
    multiplaView = [[MultiplaView alloc] initWithNibName:@"MultiplaView" bundle:nil];
    multiplaView.delegate = self;
}

VC2:

@interface MultiplaView ()
{
    IBOutlet UILabel *bonus;
    IBOutlet UILabel *totalStake;
    IBOutlet UILabel *maxWinPot;
    IBOutlet UITextField *singleImport;
    IBOutlet UITextField *multiImport;
}

@end

@implementation MultiplaView

-(id)init
{
    self = [super init];
    if (self)
    {
        // Something...
    }
    return self;
}

这些是奥特莱斯:

Outlets links

编辑:

MultiplaView是一个UIViewController(对不好的名字感到抱歉......)。我不会调用该对象中的floatValue方法。 当我删除UITextFields上的出口链接时,它不会崩溃...... 问题是:为什么编译器在nib加载期间在UITextField上执行floatValue请求?

解决:

这是textFields上的自定义setter方法。我在想,将它们声明为ivar并将它们与出口连接起来,Xcode不应该创建自动的setter方法......所以Xcode将我的方法作为setter读取,并在加载nib时调用它们。

如您所见,这是代码:

-(void)setSingleImport: (float)importWithoutComma
{
    float import = importWithoutComma / 100.0;
    NSString *importStr = [NSString stringWithFormat:@"€ %.2f", import];
    singleImport.text = importStr;
}

我更改了-setSingleImportValue:中方法的名称,现在可以正常使用

2 个答案:

答案 0 :(得分:0)

您可以加载xib:

MultiplaView * multiplaView = [[[NSBundle mainBundle] loadNibNamed:@"MultiplaView" owner:self options:nil] objectAtIndex:0];
multiplaView.delegate = self;

答案 1 :(得分:0)

您需要使用正确的方法加载MultiplaView笔尖,使用此方法

MultiplaView * multiplaView = [[[NSBundle mainBundle] loadNibNamed:@"MultiplaView" owner:self options:nil] objectAtIndex:0];