【问题标题】:[NSPlaceholderMutableString initWithString:]: nil argument exception coming after casting the UITextField[NSPlaceholderMutableString initWithString:]:转换 UITextField 后出现 nil 参数异常
【发布时间】:2017-11-29 03:44:10
【问题描述】:

我有这样的代码。

else if ([controlIn isKindOfClass:UITextField.class]) {
    UITextField *cast = (UITextField *)controlIn;
    if (cast.inputView != NULL) {
        cast.text = [self setResolvedValue:cast metrixUIViewControllerIn:metrixUIViewControllerIn valueIn:valueIn];
    } else {
        cast.text = valueIn;
    }

但是在这个if (cast.inputView != NULL) 行中我遇到了一个异常

“[NSPlaceholderMutableString initWithString:]: 无参数”

我的cast 不是零。但是出现此错误的原因是什么。请帮我。 谢谢

更新

+ (NSString*) setResolvedValue:(UIView *)viewIn metrixUIViewControllerIn:(MetrixUIViewController *)metrixUIViewControllerIn valueIn:(NSString *)valueIn {
NSMutableString *resolvedValue = [NSMutableString stringWithString:valueIn];
if (![MetrixStringHelper isNullOrEmpty:valueIn] && [viewIn.inputView isKindOfClass:[UIPickerView class]]) {
    MetrixColumnDef *columnDef = [MetrixControlAssistant getColumnDefAssociatedToPicker:metrixUIViewControllerIn picker:(UIPickerView *)viewIn.inputView];
    NSString *uniqueName = [MetrixControlAssistant getUniqueNameAssociatedToPicker:metrixUIViewControllerIn picker:(UIPickerView *)viewIn.inputView];
    NSMutableArray *dataSet = [metrixUIViewControllerIn.pickerData objectForKey:uniqueName];
    for (NSDictionary *dictionary in dataSet) {
        if ([MetrixStringHelper value:valueIn isEqualTo:[dictionary objectForKey:columnDef.lookupDef.valueColumn]]) {
            resolvedValue = [dictionary objectForKey:columnDef.lookupDef.displayColumn];
            break;
        }
    }
}
return resolvedValue;

}

【问题讨论】:

  • 让我们尝试通过if (cast.inputView)而不是if (cast.inputView != NULL)进行检查
  • @trungduc 还是一样 :(
  • 你能显示setResolvedValue方法吗?
  • @trungduc 我用那部分更新了问题。但这甚至不在 if 语句中。它跳转到条件行上的异常。

标签: ios objective-c uitextfield


【解决方案1】:

问题是因为在初始化resolvedValuevalueIn 为nil。在使用 resolvedValue 初始化之前检查并确保 valueIn 不为零。

您应该查看 Apple 文档以了解 stringWithString: 方法。

如果 aString 为 nil,则引发 NSInvalidArgumentException。

尝试用下面的代码替换你的方法

+ (NSString*) setResolvedValue:(UIView *)viewIn metrixUIViewControllerIn:(MetrixUIViewController *)metrixUIViewControllerIn valueIn:(NSString *)valueIn {
  if ([MetrixStringHelper isNullOrEmpty:valueIn] || ![viewIn.inputView isKindOfClass:[UIPickerView class]]) {
    return @"";
  }

  NSMutableString *resolvedValue = [NSMutableString stringWithString:valueIn];
  MetrixColumnDef *columnDef = [MetrixControlAssistant getColumnDefAssociatedToPicker:metrixUIViewControllerIn picker:(UIPickerView *)viewIn.inputView];
  NSString *uniqueName = [MetrixControlAssistant getUniqueNameAssociatedToPicker:metrixUIViewControllerIn picker:(UIPickerView *)viewIn.inputView];
  NSMutableArray *dataSet = [metrixUIViewControllerIn.pickerData objectForKey:uniqueName];
  for (NSDictionary *dictionary in dataSet) {
    if ([MetrixStringHelper value:valueIn isEqualTo:[dictionary objectForKey:columnDef.lookupDef.valueColumn]]) {
      resolvedValue = [dictionary objectForKey:columnDef.lookupDef.displayColumn];
      break;
    }
  }
  return resolvedValue;
}

【讨论】:

  • 但是为什么它在条件行上崩溃了。如果错误与此行有关,它至少应该进入内部不是吗?
  • 其实我不知道。但是对于错误日志,问题出在您初始化resolveValue 时。也许 Xcode 并不总是正确的 ;)
  • 但还是一样 :(
  • 对不起,我已经更新了我的答案。你可以再试一次。
  • 谢谢!有效。 :) 我仍然无法想象为什么它没有在这条线上崩溃。你能解释一下这个例外吗? [NSPlaceholderMutableString initWithString:]: 无参数
猜你喜欢
  • 1970-01-01
  • 2017-01-10
  • 1970-01-01
  • 2018-11-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多