【问题标题】:NSDictionary's key names changes after an NSObjectNSDictionary 的键名在 NSObject 之后发生变化
【发布时间】: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


【解决方案1】:

您需要使用NSMutableDictionary 而不是NSDictionary。这是 NSDictionary 的子类,可编辑。

看看这个answer 以获得很好的解释。

一个例子:

NSMutableDictionary *mdict = [[NSMutableDicionary alloc]init];
[mdict setObject:@"Hello World!" forKey:@"whateverKey"]

阅读课程参考here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-14
    • 1970-01-01
    • 2017-08-26
    • 1970-01-01
    相关资源
    最近更新 更多