2014-03-26 51 views
-1

在頭文件:如何使用setValue或setObject修改NSMutableDictionary?

@property (strong, nonatomic) NSMutableArray *vocabs; 
@property (strong, nonatomic) NSMutableDictionary *vocab; 
在.m文件

-(void) loadFile { 
    NSString* filepath = [[NSBundle mainBundle]pathForResource:@"vocabs" ofType:@"json"]; 

    NSData *data = [NSData dataWithContentsOfFile:filepath]; 

    vocabs = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil]; 



} 

-(void) renderVocabs { 
    //NSLog(@"json file = %@", vocabs); 
    if ([vocabs count] == 0) { 

    } else { 

     vocab = [vocabs objectAtIndex:vocabIndex]; 
     //NSLog(@"%d", vocabIndex); 
     //NSLog(@"%d", [vocabs count]); 
     NSString *word = [vocab objectForKey:@"word"]; 

     labelWord.text = word; 

     tvDefinitions.text = [NSString stringWithFormat:@"(%@) %@" , [vocab objectForKey:@"subject"], [vocab objectForKey:@"definitions"]]; 

     NSString *imgName = [NSString stringWithFormat:@"%@.jpg",word]; 
     NSLog(@"%@", imgName); 
     [imageVocab setImage: [UIImage imageNamed:imgName]]; 

     NSString *remembered = [vocab objectForKey:@"remembered"]; 

     if ([remembered isEqualToString:@"0"]) { 

      self.btnRemember.hidden = FALSE; 

     } else { 

      self.btnRemember.hidden = TRUE; 

     } 

    [self setDisplayFontSize]; 

    } 
} 
- (IBAction)btnTick:(UIButton *)sender { 
    [vocab setObject:@"1" forKey:@"remembered"]; 
} 

和我

** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: '-[__NSCFDictionary setObject:forKey:]: mutating method sent to immutable object' 
*** First throw call stack: 

我做了什麼錯?任何人都可以指向正確的方向嗎?提前致謝。

+2

的錯誤是明顯的。 'vocab'實際上是一個'NSDictionary',而不是'NSMutableDictionary'。 – rmaddy

+0

是的,我的意思是setObject – tipsywacky

+0

顯示如何初始化vocab,可能在那裏你只有一個不可變的'NSDictionary' – Volker

回答

2

您的陣列最有可能的是僅包含NSDictionary實例,而不是NSMutableDictionary實例,因此您無法修改它們。如果您將NSJSONReadingMutableContainers發送到JSONObjectWithDataCall,則應該返回可變對象。

self.vocabs = [NSJSONSerialization JSONObjectWithData:data options: NSJSONReadingMutableContainers error:nil]; 
+0

非常感謝! – tipsywacky

2

的問題是,調用東西一個NSMutableDictionary(或陣列)不使它之一。

基本上這個代碼是無關緊要的:

@property (strong, nonatomic) NSMutableArray *vocabs; 
@property (strong, nonatomic) NSMutableDictionary *vocab; 

重要的是你分配給這些屬性什麼對象。

+0

會是鑄造問題嗎? – tipsywacky

+0

這將是一個創造/實證問題。你如何創建'vocab'? – Aaron

1

這條線......

vocab = [vocabs objectAtIndex:vocabIndex]; 

有待...

self.vocab = [NSMutableDictionary dictionaryWithDictionary:[vocabs objectAtIndex:vocabIndex]]; 
+0

完美!非常感謝! – tipsywacky

+1

我更喜歡@aaron回答 – Flexicoder

相關問題