【问题标题】:UITextField floatValue loading NibUITextField floatValue 加载 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 链接...当我删除这些链接时,它不会崩溃。

标签: ios objective-c uitextfield xib


【解决方案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 笔尖。总是出错
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多