Hola :) Tengo un problema de manera similar como en Working with the same NSManagedObjectContext in multiple tabs
fondo:
Mi managedObjectContext (más MOC) se inicializa en mi clase AppDelegate y pasó throught a varias pestañas por
myViewController.managedObjectContext = self.managedObjectContext;
o en el método init con self.managedObjectContext = pContext;
el flujo es: la primera vista es una lista simple de colecciones. Las colecciones se obtienen con NSFetchedResultsController (myViewController : UITableViewController<NSFetchedResultsControllerDelegate>
). Al seleccionar uno, navega más profundo, pero aún pasa este MOC.
En el siguiente controlador (detalles ViewController), enumero algunos elementos de esta colección con los que puedo interactuar (por ejemplo, establecer conmutadores).
también tengo una editingObjectContext:
NSManagedObjectContext no se actualiza correctamente
// DetailsViewController.m
NSManagedObjectContext* editingContext = [[NSManagedObjectContext alloc] init];
[editingContext setPersistentStoreCoordinator:[managedObjectContext persistentStoreCoordinator]];
self.editingObjectContext = editingContext;
Ahora mi problema: debido a mi punto de vista tiene que girar, estoy usando el truco folowing:
// DetailsViewController.m
DetailsView *localAct = [[DetailsView alloc] initWithManagedObjectContext:managedObjectContext ... ]
DetailsView *localSen = [[DetailsView alloc] initWithManagedObjectContext:managedObjectContext ... ]
UITableView *localContainerView = [[UITableView alloc] init];
self.containerView = localContainerView;
[localContainerView release];
//[...]
[containerView addSubview:actuatorView];
self.tableView = containerView;
más que tener un botón para gestionar este artículos (cuál de ellos se mostrará y cuál no). Este botón simplemente vuelve a cargar la tabla con un nuevo fetchResult.
// DetailsView.m
- (void) manageItems{
managing = !managing;
[viewController setIsManaging:managing]; // parent
self.fetchedResultsController = nil;
NSError *error = nil;
[[self fetchedResultsController] performFetch:&error];
[self reloadData];
[self updateBarButton];
}
El método para poner los artículos en el contexto se ve tan:
// DetailsViewController.m
(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
// init + create predicate
NSSet* set = [sen filteredSetUsingPredicate:predicate];
if([set count] > 0)
{
for(Act* act in set)
{
[editingObjectContext deleteObject:act];
}
}
else
{
Act* act = [NSEntityDescription insertNewObjectForEntityForName:@"Act" inManagedObjectContext:editingObjectContext];
// do things
}
NSError *error = nil;
[[detailView fetchedResultsController] performFetch:&error];
[self.containerView reloadData];
[detailView reloadData];
}
pero después he seleccionado los elementos de la vista administrado y hecho clic en Guardar (manageItems), la vista no muestra ellas :/Tengo que cambiar la pestaña o navegar en otro controlador (principal o más profundo) para actualizarlo. mi método viewWillAppear:
// DetailsViewController.m
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
DetailsView *detailView = se ? senView : actView;
// [do uninteresting stuff]
[detailView.fetchedResultsController performFetch:nil];
[self.tableView reloadData];
// [do uninteresting stuff]
}
y viewWillDisapper llamadas
- (void)saveChanges
{
if(![editingObjectContext hasChanges])
return;
// send save-command to server
}
En una earliert Verison donde sólo había 1 vista funcionó y no han cambiado realmente mucho ...:/así que Don No entiendo por qué el MOC actúa como lo hace. La parte "manageItems" es casi igual, es solo un nivel más profundo en la nueva versión (en el DetailsView en lugar del controlador) ...
si alguien puede decirme qué puedo probar (siempre guardando en el servidor cuando cambie entre la administración y lo normal no es una solución porque el retraso en la respuesta del servidor es demasiado alto para la actualización, por lo que tengo menos para voltear la vista. También actualizo las vistas con self.tableView/detailView/self.containerView refresh trae el mismo resultado: /).
y un segundo problema: no puedo llamar al método "editingObjectContext save:" después de enviarlo al servidor, porque arroja errores y no guarda nada en la base de datos local.
error en handleChangeResponse: "La operación no pudo completarse (error de cacao 133020.)" error de dominio = Código NSCocoaErrorDomain = 133020 UserInfo = {0x4d8bb90 conflictList = ( "NSMergeConflict (0x5a2fac0) para NSManagedObject (0x5a46a80) con objectID '0x5a46420' con oldVersion = 7 y newVersion = 8 y snapshot de objeto antiguo = {\ n iconName = noicon; \ n [...]; \ n} y nueva fila en caché = {\ n iconName = noicon; \ n [...] \ N}" )}
si tiene preguntas o necesita algo más de código (es decir, de la versión anterior), entonces sólo hay que preguntar;)
gracias en la anticipación :)
bien, encontré una versión que está trabajando con la vista flipview ... ya copié el código en el nuevo, pero sigue el mismo problema ...:/ '- (void) manageItems/* DetailsViewController */ { \t DetailsView * detailView = isSen? senView: actView; \t [detailView manageItems]; } ' --- ' - (void) manageItems // DetailsView { \t managing =! Managing; \t [viewController setIsManaging: managing];/* parent */ \t self.fetchedResultsController = nil; \t NSError * error = nil; \t [[self fetchedResultsController] performFetch: & error]; \t [viewController.containerView reloadData]; \t [self updateBarButton]; } ' – geo