[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;
}
问题是因为初始化resolvedValue
时valueIn
为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;
}
我有这样的代码。
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;
}
问题是因为初始化resolvedValue
时valueIn
为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;
}