NSInvalidArgumentException',原因:'-[__NSCFConstantString objectForKey:]:无法识别的选择器发送到实例 0x10256a1b0'
Posted
技术标签:
【中文标题】NSInvalidArgumentException\',原因:\'-[__NSCFConstantString objectForKey:]:无法识别的选择器发送到实例 0x10256a1b0\'【英文标题】:NSInvalidArgumentException', reason: '-[__NSCFConstantString objectForKey:]: unrecognized selector sent to instance 0x10256a1b0'NSInvalidArgumentException',原因:'-[__NSCFConstantString objectForKey:]:无法识别的选择器发送到实例 0x10256a1b0' 【发布时间】:2017-12-13 09:16:59 【问题描述】:我有一个视图控制器,我在其中解析 xml 文件并在字典中获取其值,我试图获取标签中的值,但我的应用程序因显示此错误而崩溃*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFConstantString objectForKey:]: unrecognized selector sent to instance 0x10256a1b0'
我从字典中获取值的代码是这些,
NSLog(@"string: %@", str);
NSDictionary *xmlDoc = [NSDictionary dictionaryWithXMLString:str];
NSLog(@"dictionary: %@", xmlDoc);
for (NSDictionary * oneCustomer in xmlDoc)
// Create a new Customer record
_lblID.text = [oneCustomer objectForKey:@"_id"];
NSLog(@"Reg: %@ ",_lblID.text);
_lblAlert.text = [oneCustomer objectForKey:@"_topic"];
NSLog(@"Make: %@ ",_lblAlert.text);
_lblxref.text = [oneCustomer objectForKey:@"xref"];
NSLog(@"Type: %@ ",_lblxref.text);
_lbltext.text = [oneCustomer objectForKey:@"text"];
NSLog(@"Model: %@ ", _lbltext.text);
_lblgraphic.text = [oneCustomer objectForKey:@"explanation"];
NSLog(@"Model: %@ ",_lblgraphic.text);
_lblprompt.text = [oneCustomer objectForKey:@"prompt"];
NSLog(@"Model: %@ ",_lblprompt.text);
_lblvoice.text = [oneCustomer objectForKey:@"_id"];
NSLog(@"Model: %@ ", _lblvoice.text);
//roils = [oneCustomer objectForKey:@"recommended oil"];
//NSLog(@"Model: %@ ",roils);
如何消除此错误? 这是我的字典,
dictionary:
"__name" = QF;
"_category" = "C&M";
"_id" = AB2001;
"_ni_exempt" = no;
"_topic" = Alertness;
answers =
answer = (
"_correct" = no;
text = "give an arm signal as well as using your indicators";
,
"_correct" = no;
text = "signal so that other drivers can slow down for you";
,
"_correct" = yes;
text = "look over your shoulder for a final check";
,
"_correct" = no;
text = "select a higher gear than normal";
);
;
question =
explanation =
text = "If you want to make a U-turn, slow down and ensure that the road is clear in both directions. Make sure that the road is wide enough to carry out the manoeuvre safely.";
voice =
"_id" = "AB2001-2";
;
;
prompt = "Mark one answer";
text = "Before you make a U-turn in the road, you should";
voice =
"_id" = "AB2001-1";
;
xref = "DES s4, DES s9, HC r159-161";
;
我必须从这本字典中提取所有值我怎样才能得到这个?
【问题讨论】:
显然在某些时候oneCustomer
是一个NSString
对象,而不是NSDictionary
,所以你不能对它执行[oneCustomer objectForKey:someKey]
并导致崩溃。
那么现在该如何解决呢?如何从字典中获取值? @Larme
这不是字典。你能给我们str
的值吗?我有一些猜测,比如为什么 for 循环......所以 _lblID.text = [xmlDoc objectForKey:@"_id"];
而不是 _lblID.text = [oneCustomer objectForKey:@"_id"];
(等等),但这是疯狂的猜测......
我已经添加了字典,请检查它。@Larme
删除for (NSDictionary * oneCustomer in xmlDoc)
,然后只做_lblID.text = [xmlDoc objectForKey:@"_id"];
(等等,将oneCustomer
替换为xmlDoc
。
【参考方案1】:
希望对你有帮助,
-(void)fetchValuesFromDictioanry:(NSDictionary*)xmlDict
for (NSString *string in [xmlDict allKeys])
if ([[xmlDict valueForKey:string] isKindOfClass:[NSDictionary class]])
[self fetchValuesFromDictioanry:[xmlDict valueForKey:string]];
else if ([[xmlDict valueForKey:string] isKindOfClass:[NSString class]])
if ([string isEqualToString:@"_id"] && [[xmlDict valueForKey:string] isKindOfClass:[NSString class]])
_lblID.text = [xmlDict valueForKey:@"_id"];
else
NSLog(@"%@", NSStringFromClass([[xmlDict valueForKey:string] class]));
NSLog(@"Model: %@ ", [xmlDict valueForKey:string]);
//Set here other labels
else if ([[xmlDict valueForKey:string] isKindOfClass:[NSArray class]])
for (NSDictionary *dictionary in [xmlDict valueForKey:string])
[self fetchValuesFromDictioanry:dictionary];
你可以这样调用,
[self fetchValuesFromDictioanry:xmlDoc];
【讨论】:
兄弟我已经解析了文件,问题是我得到的字典我想从中提取值。 @Hitesh Sultaniya @Nabeel 当您将字典传递给此函数时,您将能够获取所需的所有值,对不起方法名称,但这只会遍历您的字典并在何时打印值key 的任何值都是字符串,你也不会得到任何错误 如何在视图加载时调用此方法? @Hitesh Sultaniya @Nabeel 请检查更新的答案,但参数应该是字典 兄弟,它只显示字典中的 id 和 topic 的值,而对于其他它显示为 null。 @Hitesh Sultaniya以上是关于NSInvalidArgumentException',原因:'-[__NSCFConstantString objectForKey:]:无法识别的选择器发送到实例 0x10256a1b0'的主要内容,如果未能解决你的问题,请参考以下文章