[NSPlaceholderMutableString initWithString:]: 转换 UITextField 后出现 nil 参数异常

[NSPlaceholderMutableString initWithString:]: nil argument exception coming after casting the UITextField

我有这样的代码。

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:]: nil argument"

我的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;

}

问题是因为初始化resolvedValuevalueIn为nil。在使用它初始化 resolvedValue.

之前检查并确保 valueIn 不为零

您应该查看有关 stringWithString: 方法的 Apple 文档。

Raises an NSInvalidArgumentException if aString is nil.

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

+ (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;
}