2011-01-07 4 views
6

나는 거대한 동기화 절차 beetwen 아이폰과 웹 서버와 꽤 복잡한 애플 리케이션에 노력하고 있습니다. separete 스레드에서 동기화 프로 시저를 실행할 때까지 레코드 추가에 문제가 없습니다. 그러면 serwer에서 데이터가 업데이트되어 아이폰에 다시 전송됩니다. 그러나이 절차 후 삽입, 새로운 데이터는이 같은 오류가 발생할 : 내가 어떤 솔루션을하지만 행운없이 찾아 봤는데데이터 저장소에 저장하지 못했습니다 : 작업을 완료 할 수 없습니다. (코코아 오류 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}" 
    ); 
} 

.

도움이 될 수 있으면 미리 감사드립니다.


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

팩토리 클래스 here을 설명하지만, probablly 동기화 과정을 거친 후 정확하게 갱신되지 않는 상황에 문제가있다. 에 따르면

+1

NSUndoManager를 사용합니까? NSManagedObjectContext는 그것이 사용되는 쓰레드에서 만들어 져야한다는 것을 기억해야한다. – Felix

+0

UndoManager를 사용하지 않고 정확한 스레드에서 init 컨텍스트에 대한 사실을 알고 있습니다. –

답변

3

:

오류 코드가 병합 정책이 실패 코어 데이터 완전 병합 할 수없는 것을 나타 내기 :

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

그 오류가 NSManagedObjectMergeError입니다.

NSError 개체가이 오류를 디코딩하는 데 도움을 줄 수 있습니다. 새 데이터를 삽입하는 데 사용하는 코드를 게시 할 수 있습니까?

+0

나는 위에 답을 게시했습니다 :) –

+0

질문에 원래 NSLog의 결과에 게시 한 오류가 있습니까? –

+0

예, 정확한 오류입니다. –

관련 문제