UITextField floatValue 加载 Nib
Posted
技术标签:
【中文标题】UITextField floatValue 加载 Nib【英文标题】:UITextField floatValue loading Nib 【发布时间】: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
属性上调用它。例如(使用您的 singleImport
UITextField
对象)[singleImport.text floatValue]
。
MultiplaView中没有调用floatValue的方法...
如果您取消链接UITextField
网点,会发生这种情况吗?
您确定VC2
是导致崩溃的原因吗?如果你不分配初始化它,它会停止崩溃吗?
我确定这是导致崩溃的笔尖加载过程。我尝试了很多方法来初始化这个视图,但它总是因为这个错误而崩溃,总是与 TextField Outlets 链接...当我删除这些链接时,它不会崩溃。
【参考方案1】:
你可以加载xib:
MultiplaView * multiplaView = [[[NSBundle mainBundle] loadNibNamed:@"MultiplaView" owner:self options:nil] objectAtIndex:0];
multiplaView.delegate = self;
【讨论】:
我也这样做了,但它不会改变结果。错误。我尝试清理构建文件夹并分析 XML,没有任何改变【参考方案2】:您需要使用正确的方法加载 MultiplaView nib,请使用此方法
MultiplaView * multiplaView = [[[NSBundle mainBundle] loadNibNamed:@"MultiplaView" owner:self options:nil] objectAtIndex:0];
【讨论】:
MultiplaView 是一个 UIViewController,而不仅仅是一个简单的 UIView。我还尝试初始化控制器并加载 self.view 笔尖。总是出错以上是关于UITextField floatValue 加载 Nib的主要内容,如果未能解决你的问题,请参考以下文章
加载 UItableView 以响应 uitextfield
在 UITableView 重新加载时以编程方式打开/关闭 UITextField 的 inputView
重新加载行包含带有 rightView 的 UITextField 会导致无限循环和内存溢出