我有一个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;
}
这些是奥特莱斯:
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:
中方法的名称,现在可以正常使用
答案 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];