2010-11-22 21 views
1

commitEditingStyle kullanarak UITableView'dan bir satırı sildiğimde, uygulamanız aşağıdaki hata iletisiyle çöküyor. Garip olan şey olsaSatır silme sırasında çökme - Güncelleştirilmeyen bölümdeki tutarsızlık

bölüm 4. dan ben mesaja göre bölüm 3. tutarsızlık gelen siliyorum olduğunu * in Onaylama yetmezliği - [UITableView _endCellAnimationsWithContext:], /SourceCache/UIKit_Sim/UIKit-1262.60. 3/UITableView.m: 920 2010-11-22 19: 56: 44.789 bCab [23049: 207] * Yakalanmamış istisna 'NSInternalInconsistencyException' nedeniyle uygulama sonlandırılıyor, nedeni: 'Geçersiz güncelleştirme: bölüm 4'teki geçersiz satır sayısı. Güncelleştirme (1) 'den sonra varolan bir bölümde bulunan satırların sayısı, bu bölümdeki güncelleştirme sayısına (0) eklenecek satır sayısına eşit olmalıdır, artı veya eksi o bölümden eklenen veya silinen satırların sayısı (0 eklenir). , 0 silindi. ' Bir satır bölüm 3'ten silindiğinde

veri kaynağı olarak, ben 3. bölümdeki satır sayısına bağlı olarak bölüm 4 güncellemek, 4. bölümde satır sayısı 0'dan 1'e gider bu soruna neden gibi görünüyor . Bundan kaçınmanın bir yolu yok mu?

Herhangi bir işaretçi çok takdir edilecektir. Teşekkürler.

UPDATE:

numberOfSectionsInTableView - (NSInteger) numberOfSectionsInTableView: (UITableView *) tableView { dönüş 6;
}

numberOfRowsInSection

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 
bCabAppDelegate *appDelegate = [[UIApplication sharedApplication] delegate]; 

    if (section == 0) {  // First name, last name 
     return 2; 
    } 
    else if (section == 1) { // Password 
     return 2; 
    } 
    else if (section == 2) { // Mobile, DOB , Gender 
     return 3; 
    } 
    else if (section == 3) { // credit cards 
     return [creditCards count]; 
    } 
    else if (section == 4) { // Add credit card 
     if ([creditCards count] >= 3) { 
      return 0; 
     } 
     else { 
      return 1; 
     } 
    } 
    else if (section == 5) { 
     return 0; 
    } 

    return 0; 

}

commitEditingStyle

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath { 
    if (editingStyle == UITableViewCellEditingStyleDelete) { 
     if (indexPath.section == 3) { 
     // Delete the row from the data source 
     NSLog(@"%d %d", indexPath.section, indexPath.row); 
     [creditCards removeObjectAtIndex:indexPath.row]; 

     // Delete from backend 

     [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:YES]; 

     //[tableView reloadData]; 
     } 
    } 
    else if (editingStyle == UITableViewCellEditingStyleInsert) { 
     // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view 
    } 

}

[tableView reloadData] ile aynı sonuçları içeren ve kullanmadan denedim.

Yardım etmeye çalıştığınız için teşekkürler!

+0

Eğer numberOfSectionsInTableView ve tableView gönderebilir miyim? – MathieuF

+0

Satırı kaldırmak için kod gönderebilir misiniz? –

cevap

3

veri kaynağı olarak, ben bölüm 3. satır sayısına bağlı olarak bölüm 4 güncelleme 4 0'dan Bu görünüyor 1'e gider Sorun neden. 'dan kaçınmanın bir yolu yok mu?

deleteRowsAtIndexPaths:withAnimation kullanırken, veri kaynağının yalnızca belirtilen dizin yollarıyla satırları kaldırmış olacağını garanti edersiniz. Durumunuzda, tabloya bir satır ekliyorsunuz, bu da veri kaynağının durumunun, tablo görünümünün beklediği gibi olmadığı anlamına gelir. Ayrıca böyle bir şey yapmak gerekir 4. bölümde bir satır ekleme gerektirir Bölüm 3'de bir satır silerken

: numberOfRowsInSection yöntemleri plz:

[self.tableView beginUpdates]; 
[self.tableView [NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade]; 
[self.tableView insertRowsAtIndexPath:[NSArray arrayWithObject:indexPathForInsertedRow] withRowAnimation:UITableViewRowAnimationFade]; 
[self.tableView endUpdates]; 
+0

Mükemmel çalıştı! Teşekkürler bir ton .. – Prasanna

0

Bölüm 3'teki bir satır silindiğinde yeni satırı bölüm 4'e nasıl eklersiniz?
Bu iyi bir çözüm değil, ancak satır silindiğinde reloadData yapmayı deneyebilirsiniz.

+0

Sistemdeki maksimum kredi kartı sayısı 3'tür. 3 ise, Kredi kartı ekle hücresine ihtiyacım yok. Aksi halde, bende var. reloadData'yı denedim ve hiçbir etkisi yok. Cevabınız için teşekkür ederiz. – Prasanna

1

Hücreyi silmeden önce, ilgili nesneyi kredi kartlarında mı silersiniz? Bir satır bölümünde bölüm 3, satır sayısı silindiği zaman

+0

Evet, onu ilgili dizinden kaldırıyorum. Sorumu commitEditingStyle koduyla güncelledim. – Prasanna

+0

Satırı silmeden önce reloadData'yı yeniden başlatmayı deneyin. – MathieuF

+0

Yeniden çöküyor, ancak biraz farklı bir mesajla - Yakalama dışı istisna 'NSInternalInconsistencyException' nedeniyle uygulamayı sonlandırma, nedeni: 'Geçersiz güncelleştirme: bölüm 3'teki geçersiz satır sayısı. Güncelleştirmeden sonra varolan bir bölümde bulunan satır sayısı (3) bu bölümdeki güncelleme sayısına (3) eşit, artı veya eksi o bölümden eklenen veya silinen satırların sayısına eşit olmalıdır (0 eklenmiş, 1 silinmiş). – Prasanna

İlgili konular