【发布时间】:2014-04-25 08:56:17
【问题描述】:
我有一个奇怪的问题。
M_DrugListRow 有这些属性:NAME,SEGMENT,ATTRIBUTE,COLORCODE,ID,DESCRIPTION
dict 有这些 drug_name,segment,attribute,colorcode,..
M_DrugListRow *m= [[M_DrugListRow alloc]initDrugRow:[arr_for_picker objectAtIndex:row] val:0]
[dict setValue:m.NAME forKeyPath:@"drug_name"];
这个code dict之后有M_DrugListRow的keys(NAME,SEGMENT,ATTRIBUTE,COLORCODE,DESCRIPTION),不是他自己的keys(name,segment,attribute,colorcode,drug_name) 所以它在我的代码中给出了错误。
如果我把它改成这段代码,它就可以工作:
[dict setValue:[[arr_for_picker objectAtIndex:row]objectForKey:@NAME"] forKeyPath:@"drug_name"];
我使用第一种类型太多了。但是效率不高。为什么会发生这种情况,我该如何解决?
代码: M_DrugListRow.h
@interface M_DrugListRow : M_Drug
-(id)initDrugRow:(M_Drug*)drugModel val:(NSInteger)val
{
self=[super init];
@try {
self=[self initDrug:[NSDictionary dictionaryWithPropertiesOfObject:drugModel]];
liquid =[[NSMutableArray alloc]init];
method =[[NSMutableArray alloc]init];
if(val){
liquid= [DataAccessLiquid drugliquid:[VC_Login getGuid] drug_id:self.ID];
method= [DataAccessMethod:[VC_Login getGuid] drug_id:self.ID];
}
}
@catch (NSException *exception) {
}
@finally {
}
return self;
}
M_Drug.h
-(id)initDrug:(NSDictionary*)par
{
self=[super init];
dict =[[NSDictionary alloc]initWithDictionary:par];
@try {
ATTRIBUTE1= [par valueForKey:@"ATTRIBUTE1"];
NAME= [par valueForKey:@"NAME"];
COLORCODE= [[par valueForKey:@"COLORCODE"]boolValue];
DESCRIPTION= [par valueForKey:@"DESCRIPTION"];
SEGMENT= [par valueForKey:@“SEGMENT”];
ID= [[par valueForKey:@"ID"]integerValue];
}
@catch (NSException *exception) {
}
@finally {
}
return self;
}
【问题讨论】:
-
请发
initDrugRow:value:方法 -
您看到了什么错误?我们可以看到 M_DrugListRow.h 吗?如果没有更多信息,很难看出这里发生了什么
-
@akashg 我发布了代码。 [<__nsdictionaryi> setValue:forUndefinedKey:]:这个类不符合键 drug_name 的键值编码
-
尝试使用 [dict setObject: forKey:]
-
没用。但问题是对 dict 和更改键的影响。 :/我找不到原因。但是键是只有 M_Drug 的所有属性。
标签: ios objective-c nsdictionary