[__NSCFDictionary setObject:forKey:]:将mutating方法发送到不可变对象

时间:2011-10-13 03:15:43

标签: iphone

-(id)init{
    if (self==[super init]) {            
        NSMutableArray *listname = [[NSMutableArray alloc]initWithObjects:@"cu",@"al",@"zn",@"au",@"ru",@"fu",@"rb",@"pb",@"wr", nil];            
        NSMutableArray *listVolumn = [NSMutableArray arrayWithCapacity:[listname count]];           
        for (int i=0; i<[listname count]; i++) {
            [listVolumn addObject:[NSNumber numberWithLong:0]];
        }
        nsmutabledictionary = [[NSDictionary alloc] initWithObjects:listVolumn forKeys:listname];
    }
    return self;
}

在我的init方法中,我定义了两个NSMutableArray,并添加到NSMutableDictionary nsmutabledictionary。 用我的另一种方法:

[nsmutabledictionary setObject:[NSNumber numberWithLong:100] forKey:@"cu"];

但它在上面线崩溃: enter image description here

2 个答案:

答案 0 :(得分:16)

nsmutabledictionary = [[NSDictionary alloc] initWithObjects:listVolumn forKeys:listname];

应该是

nsmutabledictionary = [[NSMutableDictionary alloc] initWithObjects:listVolumn forKeys:listname];

答案 1 :(得分:2)

在您的代码中,我看到nsmutabledictionary = [[NSDictionary alloc] initWithObjects:listVolumn forKeys:listname];  当你打算将它作为NSMutableDictionary

时,你宣称它是NSDictionary