I use NSMutableDictionary and hit this error:
'NSInternalInconsistencyException', reason: '-[__NSCFDictionary removeObjectForKey:]: mutating method sent to immutable object'
Here is the code:
// Turn the JSON strings/data into objects NSError *error; NSMutableDictionary *invoiceDictFromReq = [[NSMutableDictionary alloc] init]; // invoiceDictFromReq = (NSMutableDictionary *)[NSJSONSerialization JSONObjectWithData:[request responseData] options:kNilOptions error:&error]; invoiceDictFromReq = [NSMutableDictionary dictionaryWithDictionary:[NSJSONSerialization JSONObjectWithData:[request responseData] options:kNilOptions error:&error]]; NSLog(@"invoiceDictFromReq count: %i, key: %@, value: %@", [invoiceDictFromReq count], [invoiceDictFromReq allKeys], [invoiceDictFromReq allValues]); // Get values and keys from JSON response self.invoiceDict = [invoiceDictFromReq objectForKey:@"invoice"]; NSNumber *invoiceAmount = [self.invoiceDict objectForKey:@"amount"]; NSNumber *invoiceId = [self.invoiceDict objectForKey:@"id"]; NSNumber *invoiceNumber = [self.invoiceDict objectForKey:@"number"]; NSNumber *checkoutStarted = [self.invoiceDict objectForKey:@"checkoutStarted"]; NSNumber *checkoutCompleted = [self.invoiceDict objectForKey:@"checkoutCompleted"]; NSLog(@"amount: %@, id: %@, number: %@, started: %@, completed: %@", invoiceAmount, invoiceId, invoiceNumber, checkoutStarted, checkoutCompleted);
All console logs indicate that the data is in order. Here, everything begins to collapse. I pass the invoiceDict property to the following view controller:
In CheckoutViewController.m:
// Change invoice checkoutCompleted to true // [self.invoiceDict removeObjectForKey:@"checkoutCompleted"]; [self.invoiceDict setObject:[NSNumber numberWithBool:YES] forKey:@"checkoutCompleted"];
Error in [self.invoiceDict setObject...] . I made sure that all the dictionaries that I use are NSMutableDictionary . I left some of the commented lines in the code to show the things I tried and I hit a brick wall. I believe that I can always create a new dictionary. Is this the preferred way to do this?
okysabeni
source share