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

Posted

技术标签:

【中文标题】[NSPlaceholderMutableString initWithString:]:转换 UITextField 后出现 nil 参数异常【英文标题】:[NSPlaceholderMutableString initWithString:]: nil argument exception coming after casting the UITextField 【发布时间】: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 语句中。它跳转到条件行上的异常。 【参考方案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:]: 无参数

以上是关于[NSPlaceholderMutableString initWithString:]:转换 UITextField 后出现 nil 参数异常的主要内容,如果未能解决你的问题,请参考以下文章