estoy usando NSMutableDictionary
y pulsa este error:"mutando método enviados a objeto inmutable" a pesar de objeto que se NSMutableDictionary
'NSInternalInconsistencyException', reason: '-[__NSCFDictionary removeObjectForKey:]: mutating method sent to immutable object'
Aquí está el código:
// 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);
Todos los registros de consola indican que la los datos están bien Aquí es donde las cosas comienzan a descomponerse. paso la propiedad invoiceDict
al siguiente controlador de vista:
// Pass the invoice to checkoutViewController
[checkoutViewController setInvoiceDict:self.invoiceDict];
En CheckoutViewController.m:
// Change invoice checkoutCompleted to true
// [self.invoiceDict removeObjectForKey:@"checkoutCompleted"];
[self.invoiceDict setObject:[NSNumber numberWithBool:YES] forKey:@"checkoutCompleted"];
El error es en [self.invoiceDict setObject...]
. Me aseguré de que todos los diccionarios que uso sean NSMutableDictionary
. Dejé algunas de las líneas comentadas en el código para mostrar las cosas que probé y choqué contra una pared de ladrillos. Supongo que siempre puedo crear un nuevo diccionario. ¿Es esa la forma preferida de hacerlo?
Gracias por la sugerencia, pero todavía me da el mismo error Ahora, tengo invoiceDictFromReq como una propiedad en .h y syntehsized en .m y lo configuré en los datos de la solicitud json como self.invoiceDictFromReq = [NSMutableDictionary dictionary ...] – okysabeni
Lamento haber cambiado mi respuesta, no fue eso. Vea si todavía tiene el problema. No tiene que retener invoiceDictFromReq porque es una variable local, pero borre la línea que crea invoiceDictFromReq por primera vez porque tiene una fuga allí –
:-). Cuando lo vi, "pero tu problema es que estás creando un NSMutableDictionary pero te estás configurando para autodefinir. Dictir un diccionario dentro de tu mutableDictionary, que no es necesariamente un Dictuario mutable también" Sabía que lo golpeaste en el acto. Tan necio de mi parte Gracias por mencionarlo. No debería haber supuesto que el analizador json nativo devuelve NSMutableDictionary. ¡Muchas gracias! – okysabeni