[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】:
问题是因为在初始化resolvedValue
时valueIn
为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 参数异常的主要内容,如果未能解决你的问题,请参考以下文章