FTASync icon indicating copy to clipboard operation
FTASync copied to clipboard

Duplicate objects synching core data to parse

Open laucel opened this issue 12 years ago • 5 comments

I've setted my project and added this fix https://github.com/itsniper/FTASync/issues/6. My app is very similar to FTASyncDemo, even simpler. I have a table view showing core data objects and two buttons, one for synching and one for adding an object. I've tried to use NSFetchedResultsController and now I'm handling by myself core data notification but in both cases I'm having the same issue. This is what I do when I add a new Person object:

NSManagedObjectContext *moc = [NSManagedObjectContext MR_contextWithParent: [NSManagedObjectContext MR_defaultContext]];                Person *newPerson = [Person MR_createInContext: moc];            //Person *newPerson = [NSEntityDescription insertNewObjectForEntityForName:@"Person" inManagedObjectContext: moc];                newPerson.name = nameField.text;        newPerson.age = [NSNumber numberWithInteger: [ageTextField.text integerValue]];        newPerson.isMale = ([isMaleField.text isEqualToString: @"YES"]?[NSNumber numberWithBool: YES]:[NSNumber numberWithBool: NO]);          [moc MR_saveNestedContexts];                  [[FTASyncHandler sharedInstance] syncWithCompletionBlock:^         {             DCLog(@"Completion Block INSERT Called");             [self dismissModalViewControllerAnimated: YES];         }                                                   progressBlock:^(float progress, NSString *message)         {             DLog(@"PROGRESS UPDATE: %f - %@", progress, message);         }];            moc = nil;

I receive three NSManagedObjectContextObjectsDidChangeNotifications, the first one for an inserted object and the other two for updating an object. In the insert notification, in the managed object context I have one object. In the next two update notifications, I have two objects: One object is the one I have just created and the other is the object returned from the server after the sync operation. This is the log after last notification:

***** DATASOURCE AFTER UPDATE(    "<Person: 0x7b835e0> (entity: Person; id: 0x6df8220 x-coredata:///Person/t3E85364B-445F-4DDA-BC49-FC80042B753D2 ; data: {\n    age = 0;\n    createdHere = 1;\n    deleted = 0;\n    isMale = 0;\n    name = Carlotta;\n    objectId = nil;\n    syncStatus = 2;\n    updatedAt = nil;\n})",    "<Person: 0x6d690c0> (entity: Person; id: 0xcff9290 x-coredata://3BB06E3A-2674-4908-B744-BC6C0208129F/Person/p8 ; data: {\n    age = 0;\n    createdHere = 1;\n    deleted = 0;\n    isMale = 0;\n    name = Carlotta;\n    objectId = mm5E0JBaqv;\n    syncStatus = 1;\n    updatedAt = "2012-12-18 09:38:14 +0000";\n})"

The result is that I have a duplicate Person in my table. On Parse side, the sync hasn't produced any duplicate. If I run again the app, the duplicate disappears and so everything is ok.

Can you help me figure out what's going on? Thanks, L.

UPDATE####

I have this problem only on iOS 5.0 and 5.1, not on iOS 6

laucel avatar Dec 17 '12 17:12 laucel

I have the same problem, any update?

alessiocasti avatar Dec 18 '12 09:12 alessiocasti

Can someone help with this?

lucabartoletti avatar Dec 18 '12 13:12 lucabartoletti

Sorry guys, I'm working a day job plus 2 startups, so my free-time for this is very limited.

Based on the error you are seeing I would guess your MagicalRecord is out of date. The first ObjectId above is a temporary ID, which has been fixed in the latest MagicalRecord.

See: https://github.com/magicalpanda/MagicalRecord/commit/0b00e39b2692f34e1d9c2f00e96a801892e53f14

itsniper avatar Dec 19 '12 23:12 itsniper

Justin, thanks for the time spent! The previous added lines are commented in the latest version of NSManagedObjectContext+MagicalRecord.m

alessiocasti avatar Dec 20 '12 07:12 alessiocasti

Hi Justin, what Alessio said is true, but decommenting that lines in the class seems to fix the problem. Sorry to bother you, but do you think that you're going to update FTASync accordingly to MagicalRecord updates? Thank you for the help.

laucel avatar Dec 20 '12 08:12 laucel