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

标签 ios objective-c 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 不为 nil。

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

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

关于ios - [NSPlaceholderMutableString initWithString :]: nil argument exception coming after casting the UITextField,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47544702/

相关文章:

IOS 如何在固定位置锚定文本字段

ios - 我使用此代码弹出一个带有“取消”和“提交”选项的文本字段,但键盘也显示。我不想显示键盘

ios - 当我单击 WKWebView 浏览器中的链接时,它会转到 safari

iphone - iOS - 将 iPhone 版本转换为 iPad

objective-c - 以编程方式加载 Nib

ios - 为什么 Objective-C 在二进制文件中包含完整的 C++ 类型名称作为字符串?我可以摆脱它吗?

ios - iOS:调用API时会添加临时数据

swift - 如何从 UITextField swift 2.0 捕获文本

javascript - iOS 上的 Safari 涉及陈旧的 $http.get 结果

ios - 以另一个 ImageView 的形状裁剪 ImageView