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

我将如何保存和加载 UITextField?

重新加载行包含带有 rightView 的 UITextField 会导致无限循环和内存溢出

当点击 UITextField 时,加载 nib 文件以充当自定义键盘

单击自定义单元格的 UITextField 后重新加载 TableView