web-gelistirme-sc.com

NSInternalInconsistencyException ', nedeni:' bölüm 0'a satır eklemeye çalışın, ancak güncellemeden sonra yalnızca bölüm var

UITableViewController kullanıyorum ve tableView güncellenirken bu hatayı alıyorum. Aşağıda benim kodum: 

Bir click olayı yaptığımda bu oluyor:

[timeZoneNames insertObject:@"HELLO" atIndex:0];  
[self.tableView beginUpdates];   
NSArray *insertIndexPaths = [NSArray arrayWithObject:[NSIndexPath indexPathForRow:0 inSection:0]];
[self.tableView insertRowsAtIndexPaths:insertIndexPaths withRowAnimation:UITableViewRowAnimationTop];
[self.tableView endUpdates];

Apple belgelerini aramayı denedim, ancak bu işe yaramadı.

Teşekkürler Aby

40
insomiac

Bu soruna daha önce rastladım. Bu, -insertRowsAtIndexPaths:withRowAnimation:-tableView:numberOfRowsInSection: çağrıldığında 0 döndürdüğü anlamına gelir. -insertRowsAtIndexPaths:withRowAnimation: öğesini çağırmadan önce modele eklemeniz gerekir (bkz: -beginUpdates )


Güncelleme

Acaba -tableView:numberOfRowsInSection:'nin dönüş değeri nedir? Ayrıca, yalnızca bir güncellemeniz varsa -beginUpdates/-endUpdates dosyasına ihtiyacınız yoktur.

[timeZoneNames insertObject:@"HELLO" atIndex:0];
// Let's see what the tableView claims is the the number of rows.
NSLog(@"numberOfRowsInSection: %d", [self tableView:self.tableView numberOfRowsInSection:0]);
NSArray *insertIndexPaths = [NSArray arrayWithObject:[NSIndexPath indexPathForRow:0 inSection:0]];
[self.tableView insertRowsAtIndexPaths:insertIndexPaths withRowAnimation:UITableViewRowAnimationTop];
28
Jeffery Thomas

Veri kaynağı çıkışını uygun şekilde ayarlamayı unuttuğumda bu hatayı karşıladım.

Bu hatayı görürseniz, TableView temsilcinizi ve veri kaynağınızı açıkça ayarladığınızdan emin olun: 

  • arayüz oluşturucunuza gidin ve 'Tablo Görünümü' ile görünüme bakın

  • cmd + sağ tıklayıp (mavi bir çizgi görmelisiniz) 'Tablo Görünümü' simgesinden dosyanın başlık simgesine sürükleyin, bunun yanında xcode 6'da sarı bir simge bulunur.

  • farenizi bırakın, temsilci ve veri kaynağı seçeneklerini görmelisiniz.

  • 'veri kaynağı' seçeneğini seçin 

masanız şimdi doğru şekilde kablolanmış olmalıdır.

29
NiallJG

Güncelleme sırasında tablodaki kaç satır ve bölümün gerçekte masa başında göründüğünü yazmayı denedim, bu da beni düşündürdü, tablo görünümündeki veri bölümlerini veri kaynağı yönteminde kaç bölüme döndürüyorum ...

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return 0;
}

1'i döndürdüğünüzden ve 0 almadığınızdan emin olun.

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return 1;
}

En azından bu benim için sorunu çözdü ...

GÜNCELLEME:

Bir süre çalıştıktan sonra yine aynı sorunu yaşıyorum. Uygulamayı biraz değiştirdim. Benim ilk görüşüm bir tableView ve sağ üstteki artı butonuna tıkladığınızda, bilgileri girebileceğiniz başka bir tablo elde edersiniz. Tamamladığınızda, bu kodla Çekirdek Veri modeline bilgi eklenir:

- (IBAction)doneButtonPressed:(UIBarButtonItem *)sender
{

MoneyBadgeAppDelegate *appDelegate =
[[UIApplication sharedApplication] delegate];

NSManagedObjectContext *context =
[appDelegate managedObjectContext];
NSManagedObject *newMoment;
newMoment = [NSEntityDescription
             insertNewObjectForEntityForName:@"SpendingMoment"
             inManagedObjectContext:context];
NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
[dateFormat setDateFormat:@"yyyyMMdd"];
NSDate *modifiedDate = [dateFormat dateFromString: self.dateTextField.text];

[newMoment setValue: modifiedDate forKey:@"date"];
[newMoment setValue: descTextField.text forKey:@"desc"];

[appDelegate.eventsArray insertObject:newMoment atIndex:0];

NSError *error;
[context save:&error];

[self dismissViewControllerAnimated:YES completion:nil];

}

Ve ilk ekrana geri döndüğümde viewDidAppear yöntemimde aşağıdakileri konsola basarak başarıyla Core Data modeline alındığını onayladım.

-(void)viewDidAppear:(BOOL)animated{
NSEntityDescription *entity = [NSEntityDescription entityForName:@"SpendingMoment"  
inManagedObjectContext:self.managedObjectContext];
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
[fetchRequest setEntity:entity];

NSError *error;
NSArray *items = [self.managedObjectContext
                  executeFetchRequest:fetchRequest error:&error];

for (SpendingMoment *moment in items) {
    NSLog(@"Date: %@, Desc: %@", [moment date], [moment desc]);
}

[self addEvent];

Ve sonra benim addEvent yöntemim bunu yapar:

- (void)addEvent {

[self.tableScreen beginUpdates];

NSIndexPath *indexPath = [NSIndexPath indexPathForRow:0 inSection:0];
[self.tableScreen insertRowsAtIndexPaths:[NSArray arrayWithObject:indexPath]
                      withRowAnimation:UITableViewRowAnimationFade];


[self.tableScreen reloadData];
[self.tableScreen endUpdates];

@try{
    [self.tableScreen scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0] atScrollPosition:UITableViewScrollPositionTop animated:YES];
}
@catch(NSException *exception){
}

}

Sorunun ne olduğu hakkında bir fikrin var mı ??? Teşekkürler!

4
Angie

"0 satırına bölüm 0 eklemeye çalışın, ancak güncellemeden sonra bölüm 0'da yalnızca 0 satır var" seçeneğini işaretleyin.

0 satırında nesne eklediğinizde kesilir, bölüm 0, hiçbir bölüm yoktur . Satır eklemeden önce bölüm eklemeyi deneyin.

 [timeZoneNames insertObject:@"HELLO" atIndex:0];
 NSLog(@"sections: %lu ",[self.downlaodTableView numberOfSections];
 // insert section 
 [self.tableView insertSections:[NSIndexSet indexSetWithIndexesInRange:NSMakeRange(0, 1)] withRowAnimation:UITableViewRowAnimationNone];
 NSLog(@"numberOfRowsInSection: %d", [self tableView:self.tableView  numberOfRowsInSection:0]);
 NSArray *insertIndexPaths = [NSArray arrayWithObject:[NSIndexPath indexPathForRow:0 inSection:0]];
 [self.tableView insertRowsAtIndexPaths:insertIndexPaths withRowAnimation:UITableViewRowAnimationTop];
0
ChokWah