Tablo veri kaynağımı doldurmak ve yönetmek için NSFetchedResultsController kullanıyorum. bir kullanıcı belirli bir satır topladığındaBazı öznitelikleri değiştirirseniz, managedObjectContext NSFetchedResultsController için el ile kaydetmem gerekiyor mu?
, bir actionsheet açılır ve sonra kullanıcı o satırın bir değeri değiştirmek olanak tanır:
NSManagedObject *managedObject = [fetchedResultsController objectAtIndexPath:selectedRowIndexPath];
[managedObject setValue:status forKey:@"status"];
Bu gerçekten iyi çalışıyor ve ben tableview hemen değişiklikleri görebilirsiniz. Bu, NSFetchedResultsController öğesinin bir şeyin değiştiğini bildiği ve bu nedenle de tablo görüntüleyicisini yeniden yüklediği anlamına gelir. Uygulamamı bırakıp bıraktığımda (tamamen) ve tekrar açtığımda, değişiklik kaydedilmez.
NSFetchedResultsConroller değişiklik kaydetme ile ilgilenir düşünürdüm.
Her değişiklikten sonra aşağıdaki kodu kullanarak el ile kaydetmem gerekiyor mu?
// Save the context.
NSError *error = nil;
if (![self.managedObjectContext save:&error]) {
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
abort();
}
Ya da belki bu kodu çağırır: Haklısın
- (void)controller:(NSFetchedResultsController *)controller didChangeObject:(id)anObject
atIndexPath:(NSIndexPath *)indexPath
forChangeType:(NSFetchedResultsChangeType)type
newIndexPath:(NSIndexPath *)newIndexPath
'didChangeObject' temsilci yönteminin içine kaydetmek kötü bir fikir değil mi? – Pieter
Eğer bunu yaptıysan, bir döngü riskini alabilirsin. NSFetchedResultsController temsilci yöntemleri, modeli değil, görünümü güncellemek için kullanılır. Dolayısıyla, bir şey içeriğe kaydedildiğinde, görünüm buna göre güncellenir (temelde tablo görünümünü yeniden yüklemeniz gerekmez). Temsilci yönteminde içeriğe kaydetmeniz gerekirse, temsilci yöntemi daha sonra bağlamda bir değişiklik fark edeceğinden, ateşlemeye devam edecektir. – Gobot
Peki çözüm nedir? – fatuhoku