【发布时间】:2014-12-12 12:17:02
【问题描述】:
我有一个 ViewController (VC1) 实例化另一个 ViewController (VC2)。 VC2 有一些与 IBOutlets 链接的 iVar。当我将 UITextField 链接到它的 ivar 时,应用程序在加载 nib 期间崩溃并出现以下错误:
*** 由于未捕获的异常 'NSInvalidArgumentException' 导致应用程序终止,原因:'-[UITextField floatValue]: unrecognized selector sent to instance
我真的不知道为什么会这样。 下面是代码:
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-loading 期间对 UITextField 执行floatValue 请求??
已解决:
这是 textFields 上的自定义 setter 方法。我当时在想,将它们声明为 ivar 并将它们与 outlet 链接,Xcode 不应该创建自动 setter 方法......所以 Xcode 将我的方法读取为 setter,并在加载 nib 期间调用它们。
如你所见,代码如下:
-(void)setSingleImport: (float)importWithoutComma
{
float import = importWithoutComma / 100.0;
NSString *importStr = [NSString stringWithFormat:@"€ %.2f", import];
singleImport.text = importStr;
}
我在 -setSingleImportValue: 中更改了方法的名称,现在它可以工作了
【问题讨论】:
-
您的错误表明您正在尝试在您的
UITextField对象上调用floatValue,这是一种它不响应的方法。也许你很困惑,想在UITextField对象的text属性上调用它。例如(使用您的singleImportUITextField对象)[singleImport.text floatValue]。 -
MultiplaView中没有调用floatValue的方法...
-
如果您取消链接
UITextField网点,会发生这种情况吗? -
您确定
VC2是导致崩溃的原因吗?如果你不分配初始化它,它会停止崩溃吗? -
我确定这是导致崩溃的笔尖加载过程。我尝试了很多方法来初始化这个视图,但它总是因为这个错误而崩溃,总是与 TextField Outlets 链接...当我删除这些链接时,它不会崩溃。
标签: ios objective-c uitextfield xib