Спасибо за помощь в поиске решения.

отаю над довольно сложным приложением с огромной процедурой синхронизации между iphone и веб-сервером. У меня нет проблем с добавлением записей, пока я не запустил процедуру синхронизации в отдельном потоке, и она обновит данные на сервере serwer и отправит их обратно на iphone. Но после этой процедуры вставка новых данных вызывает ошибку, такую как эта:

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}"
    );
}

Я искал любое решение, но без везения.

Заранее благодарю за любую полезную помощь.

    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]);
        }
}

Фабричный класс описанВот, но, вероятно, существует проблема с контекстом, который не обновляется точно после процедуры синхронизации.

 Felix07 янв. 2011 г., 13:19
Вы используете NSUndoManager? Помните, что NSManagedObjectContext ДОЛЖЕН быть создан в потоке, где он используется.
 poslinski.net07 янв. 2011 г., 13:40
Я не использую UndoManager, и я осознаю тот факт о контексте init в точном потоке.

Ответы на вопрос(1)

Решение Вопроса

http://developer.apple.com/library/ios/#documentation/cocoa/Reference/CoreDataFramework/Miscellaneous/CoreData_Constants/Reference/reference.html

эта ошибкаNSManagedObjectMergeError:

Код ошибки для обозначения сбоя политики слияния - Core Data не может завершить слияние.

Объект NSError может помочь в декодировании этой ошибки. Можете ли вы опубликовать код, который вы используете для вставки новых данных?

 poslinski.net11 янв. 2011 г., 16:31
Я выложил выше как ответ :)
 Evan Mulawski11 янв. 2011 г., 17:16
Является ли ошибка, которую вы изначально разместили в своем вопросе, результатом NSLog ниже?
 poslinski.net17 янв. 2011 г., 07:42
Да, именно эту ошибку я получаю.
 poslinski.net17 янв. 2011 г., 15:29
Похоже, что изменение политики слияния для перезаписи помогает в моем случае. Подробнееdeveloper.apple.com/library/ios/#documentation/cocoa/Reference/...Спасибо за помощь в поиске решения.

Ваш ответ на вопрос