iOS7 NSMergeConflict en un solo hilo Guardar

Tengo problemas con un simple almacenamiento de datos en una sola aplicación subprocess después de que se hayan reorderado dos filas.

He logrado simplificar la encoding para reproducir el error y apreciaría una segunda opinión con alguien más intentando esto.

Esta es una comprobación de cordura ya que sospecho de un problema de datos básicos introducido con iOS 7 ya que esto funcionó bien en iOS 6.

Primero, inicie un nuevo proyecto de datos centrales y cree este model …

modelo de datos básico simple

El atributo 'actual' es un boolean opcional. La relación de uno a varios es una relación orderada, creando un NSOrdenetworkingDataset.

Ahora agrega un par de botones a la aplicación; el primero en crear los datos (un proyecto y dos "dibujos" asociados) y el segundo para intercambiar los dos dibujos, luego establecer una propiedad dentro del primer dibujo.

Aquí está el código …

-(IBAction)onTestButton:(id)sender { id delegate = [[UIApplication shanetworkingApplication]delegate]; NSManagedObjectContext *managedObjectContext = [delegate managedObjectContext]; self.project = [NSEntityDescription insertNewObjectForEntityForName:@"Project" inManagedObjectContext:managedObjectContext]; Drawing *drawing1 = [NSEntityDescription insertNewObjectForEntityForName:@"Drawing" inManagedObjectContext:managedObjectContext]; Drawing *drawing2 = [NSEntityDescription insertNewObjectForEntityForName:@"Drawing" inManagedObjectContext:managedObjectContext]; NSMutableOrdenetworkingSet* tempSet = [NSMutableOrdenetworkingSet ordenetworkingSetWithOrdenetworkingSet:self.project.drawings]; [tempSet addObject:drawing1]; [tempSet addObject:drawing2]; self.project.drawings = tempSet; [self save]; } -(IBAction)onTestButton2:(id)sender { NSMutableOrdenetworkingSet *exchange = [self.project mutableOrdenetworkingSetValueForKey:@"drawings"]; [exchange exchangeObjectAtIndex:0 withObjectAtIndex:1]; self.project.drawings = exchange; [self save]; Drawing *drawing = [self.project.drawings objectAtIndex:0]; BOOL current = [drawing.current boolValue]; drawing.current = [NSNumber numberWithBool:!current]; [self save]; } -(void)save { id delegate = [[UIApplication shanetworkingApplication]delegate]; NSManagedObjectContext *managedObjectContext = [delegate managedObjectContext]; NSError *error = nil; if( ![managedObjectContext save:&error] ) { NSLog(@"%@ Save: Unresolved Error on Save %@", error, [error userInfo] ); abort(); } } 

Ahora, testing presionando el primer button de testing. Esto configura los datos.

Luego presione el segundo button de testing … ¡todo está bien!

Ahora presione el segundo button de testing nuevamente y BANG. Deberías get un error NSMergeConflict similar a este …

Guardar: Error no resuelto en Guardar {conflictList = ("NSMergeConflict (0x8a7d0b0) para NSManagedObject (0x8bedfa0) con objectID '0x8bd9340' con oldVersion = 1 y newVersion = 2 y snapshot de object anterior = {\ n
current = \ "\"; \ n project = \ "0x8bc3f50 \"; \ n} y nueva fila en caching = {\ n current = \ "\"; \ n project = \ "0x8aa88c0 \"; \ n} ") ;

Me doy count del error de que mi object Project ha cambiado. Sin embargo, esta es una aplicación de un solo hilo que usa el context de la aplicación principal.

He pasado demasiado time en esto y agradecería a alguien más hacer comentarios sobre dónde está el problema. ¿Es este un error de datos centrales, o soy un 'tonto' correcto?

Muchas gracias

/Ajustarse a

Tuve problemas similares y encontré una solución aquí:

http://prod.lists.apple.com/archives/cocoa-dev/2013/Oct/msg00657.html

En resumen: agregue esto a su configuration de MOC:

  [_managedObjectContext setMergePolicy:[[NSMergePolicy alloc] initWithMergeType:NSMergeByPropertyObjectTrumpMergePolicyType]]; 

Esto afecta también a OS X 10.9 Mavericks cuando se usa NSSQLStoreType. No pude repetir el error de combinación con NSXMLStoreType.

Para Swift 2.x

 managedObjectContext.mergePolicy = NSMergePolicy(mergeType: .MergeByPropertyObjectTrumpMergePolicyType)