Estoy trabajando en una aplicación bastante compleja con un enorme procedimiento de sincronización entre el iphone y el servidor web. No tengo problemas con la adición de registros, hasta que ejecute el procedimiento de sincronización en el hilo separado, y se actualizarán los datos en el servidor, y los enviarán de vuelta al iPhone. Pero después de este procedimiento, la inserción de nuevos datos de la causa del error, como este:Error al guardar en el almacén de datos: no se pudo completar la operación. (Error de cacao 133020.)
2011-01-07 12:49:10.722 App[1987:207] Failed to save to data store: The operation couldn’t be completed. (Cocoa error 133020.)
2011-01-07 12:49:10.724 App[1987:207] {
conflictList = (
"NSMergeConflict (0x5ac1ea0) for NSManagedObject (0x5a2d710) with objectID '0x5a27080 <x-coredata://E82E75ED-96DB-4CBF-9D15-9CC106AC0052/uzytkownicy/p10>' with oldVersion = 9 and newVersion = 21 and old object snapshot = {\n adres = \"<null>\";\n haslo = xxxxxxxxxxxxxxxxxxxxxx;\n \"id_uzytkownika\" = 3;\n imie = Jan;\n \"kod_jednorazowy\" = 0;\n komorka = \"<null>\";\n login = nowakjan;\n nazwisko = Nowak;\n pesel = 0;\n rodzaj = 2;\n \"stan_konta\" = 0;\n telefon = \"<null>\";\n \"uzytkownicy_uczniowie\" = \"<null>\";\n \"zmienna_losowa\" = 8G9e1;\n} and new cached row = {\n adres = \"<null>\";\n haslo = xxxxxxxxxxxxxxxxxxxxxx;\n \"id_uzytkownika\" = 3;\n imie = Jan;\n \"kod_jednorazowy\" = 0;\n komorka = \"<null>\";\n login = nowakjan;\n nazwisko = Nowak;\n pesel = 0;\n rodzaj = 2;\n \"stan_konta\" = 0;\n telefon = \"<null>\";\n \"uzytkownicy_uczniowie\" = \"<null>\";\n \"zmienna_losowa\" = 8G9e1;\n}",
"NSMergeConflict (0xd266990) for NSManagedObject (0xcd05950) with objectID '0x5a453b0 <x-coredata://E82E75ED-96DB-4CBF-9D15-9CC106AC0052/uczniowie/p125>' with oldVersion = 5 and newVersion = 10 and old object snapshot = {\n adres = \"Warszawa; ul. Lwowska 32\";\n \"data_urodzenia\" = \"1997-02-01 23:00:00 +0000\";\n dysfunkcje = \"\";\n email = \"<null>\";\n frekwencja = 0;\n \"id_ucznia\" = 86;\n imie2 = Marian;\n \"imie_ucznia\" = \"S\\U0142awomir\";\n klasa = \"0x5a47820 <x-coredata://E82E75ED-96DB-4CBF-9D15-9CC106AC0052/zespoly/p9>\";\n komorka = \"<null>\";\n \"miejsce_urodzenia\" = Warszawa;\n \"nazwisko_ucznia\" = \"S\\U0142awek\";\n \"numer_ewidencyjny\" = 20;\n opiekun1 = \"Mariusz S\\U0142awek\";\n opiekun2 = \" \";\n pesel = 97020298919;\n plec = 1;\n telefon = 890000002;\n \"uzytkownicy_uczniowie\" = \"<null>\";\n \"web_klasa\" = 50;\n} and new cached row = {\n adres = \"Warszawa; ul. Lwowska 32\";\n \"data_urodzenia\" = \"1997-02-01 23:00:00 +0000\";\n dysfunkcje = \"\";\n email = \"<null>\";\n frekwencja = 0;\n \"id_ucznia\" = 86;\n imie2 = Marian;\n \"imie_ucznia\" = \"S\\U0142awomir\";\n klasa = \"0x5a8e7c0 <x-coredata://E82E75ED-96DB-4CBF-9D15-9CC106AC0052/zespoly/p9>\";\n komorka = \"<null>\";\n \"miejsce_urodzenia\" = Warszawa;\n \"nazwisko_ucznia\" = \"S\\U0142awek\";\n \"numer_ewidencyjny\" = 20;\n opiekun1 = \"Mariusz S\\U0142awek\";\n opiekun2 = \" \";\n pesel = 97020298919;\n plec = 1;\n telefon = 890000002;\n \"uzytkownicy_uczniowie\" = \"<null>\";\n \"web_klasa\" = 50;\n}",
"NSMergeConflict (0xd2669b0) for NSManagedObject (0x5a44480) with objectID '0x5a47830 <x-coredata://E82E75ED-96DB-4CBF-9D15-9CC106AC0052/przedmioty/p12>' with oldVersion = 7 and newVersion = 15 and old object snapshot = {\n \"id_przedmiotu\" = 1;\n \"nazwa_przedmiotu\" = Historia;\n \"skrot_nazwy\" = Hist;\n} and new cached row = {\n \"id_przedmiotu\" = 1;\n \"nazwa_przedmiotu\" = Historia;\n \"skrot_nazwy\" = Hist;\n}"
);
}
que he estado buscando para cualquier solución, pero sin suerte.
Gracias de antemano por cualquier ayuda útil.
oceny_ucznia *nowaOcenka = (oceny_ucznia *)[NSEntityDescription insertNewObjectForEntityForName:@"oceny_ucznia" inManagedObjectContext:[Factory getVar:@"context"]];
nowaOcenka.przedmiot = (przedmioty *) [Factory getVar:@"cPrzedmiot"];
nowaOcenka.web_przedmiot = [NSNumber numberWithInt:[((przedmioty *)[Factory getVar:@"cPrzedmiot"]).id_przedmiotu intValue]];
nowaOcenka.nauczyciel = (uzytkownicy *)[Factory getVar:@"cNauczyciel"];
nowaOcenka.web_nauczyciel = [NSNumber numberWithInt:[((uzytkownicy *)[Factory getVar:@"cNauczyciel"]).id_uzytkownika intValue]];
nowaOcenka.lekcja = (lekcje *)[Factory getVar:@"cLekcja"];
nowaOcenka.uczen = uczeniek;
nowaOcenka.web_uczen = [NSNumber numberWithInt:[uczeniek.id_ucznia intValue]];
nowaOcenka.czas_wpisania = [NSDate date];
if (grupka != nil) {
nowaOcenka.grupa = grupka;
nowaOcenka.web_grupa = [NSNumber numberWithInt:[grupka.id_grupy_ocen intValue]];
nowaOcenka.kolumna = [NSNumber numberWithInt:([kolumienka intValue]+1)];
nowaOcenka.grupa.czas_wpisania = [NSDate date];
} else {
int wartoscOceny = [[Factory getVar:@"cSemestr"] intValue];
wartoscOceny += ([kolumienka intValue]==0) ? 2 : 0;
nowaOcenka.koncowa = [NSNumber numberWithInt:wartoscOceny];
}
nowaOcenka.wartosc = [NSNumber numberWithFloat:[[((slownik_ocen *)[self.slownikOcen objectAtIndex:[ocena selectedRowInComponent:0]]) wartosc_liczbowa] floatValue]];
nowaOcenka.ocena = [NSString stringWithFormat:@"%@",[((slownik_ocen *)[self.slownikOcen objectAtIndex:[ocena selectedRowInComponent:0]]) ocena_opis]];
nowaOcenka.semestr = [NSNumber numberWithInt:[[Factory getVar:@"cSemestr"] intValue]];
((lekcje *)[Factory getVar:@"cLekcja"]).czas_wpisania = [NSDate date];
NSError* error;
if(![[Factory getVar:@"context"] save:&error]) {
NSLog(@"Failed to save to data store: %@", [error localizedDescription]);
NSArray* detailedErrors = [[error userInfo] objectForKey:NSDetailedErrorsKey];
if(detailedErrors != nil && [detailedErrors count] > 0) {
for(NSError* detailedError in detailedErrors) {
NSLog(@" DetailedError: %@", [detailedError userInfo]);
}
}
else {
NSLog(@" %@", [error userInfo]);
}
}
clase de fábrica se describe here, pero probablly hay un problema con un contexto que no se actualiza con precisión después del procedimiento de sincronización.
¿Utiliza un NSUndoManager? Recuerde que un NSManagedObjectContext DEBE crearse en el hilo donde se utiliza. – Felix
No estoy usando UndoManager y me doy cuenta de ese hecho sobre el contexto init en el hilo exacto. –