olmanın nesnenin rağmen "yöntemi değişmez nesneye gönderilen mutasyona":Ben <code>NSMutableDictionary</code> kullanarak ve bu hatayı Vuruldum NSMutableDictionary
// 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);
Tüm konsol günlükleri göstermektedir: Burada
'NSInternalInconsistencyException', reason: '-[__NSCFDictionary removeObjectForKey:]: mutating method sent to immutable object'
kod veriler iyi. Bu, işlerin yıkılmaya başladığı yer. sonraki görünümü denetleyicisine invoiceDict
özelliği geçirmeye:
// Pass the invoice to checkoutViewController
[checkoutViewController setInvoiceDict:self.invoiceDict];
CheckoutViewController.m olarak:
// Change invoice checkoutCompleted to true
// [self.invoiceDict removeObjectForKey:@"checkoutCompleted"];
[self.invoiceDict setObject:[NSNumber numberWithBool:YES] forKey:@"checkoutCompleted"];
hata [self.invoiceDict setObject...]
yer almaktadır. Kullandığım tüm sözlüklerin NSMutableDictionary
olduğundan emin oldum. Denediğim şeyleri göstermek için koddaki bazı satırları bıraktım ve bir tuğla duvara çarptım. Her zaman yeni bir sözlük oluşturabilirim. Bunu yapmak için tercih edilen yol mu?
Teşekkür ama: Burada ayrıştırıcı kesilebilir sözlüğü nasıl olduğunu bana aynı hatayı veriyor. Şimdi, .h içinde bir özellik olarak faturaDictFromReq ve .m içinde syntehsized var ve json isteğinden veri olarak ayarlamak self.invoiceDictFromReq = [NSMutableDictionary sözlük ...] – okysabeni
Üzgünüm ben cevabımı değiştirdim, o değildi. Bakın hala sorun var mı? Yerel bir değişken olduğu için invoiceDictFromReq değerini korumak zorunda değilsiniz, ancak –
:-) sızıntınız olduğundan ilk defa invoiceDictFromReq oluşturduğunuz satırı silin. Gördüğümde, "Ama senin sorunun bir NSMutableDictionary yaratıyorsun ama siz kendi kendineçıkarın. Sözlü ifadelerinizde bir sözlük oluşturuyorsunuz, bu mutlaka bir mutableDictionary değil" diye isabetli olduğunu biliyordum. Bu kadar aptalım. İşaret ettiğin için teşekkürler. Yerel json ayrıştırıcısının NSMutableDictionary döndürdüğünü varsaymamalıydım. Çok teşekkürler! – okysabeni