保存到数据存储失败:操作无法完成。 (可可错误 133020。)
Posted
技术标签:
【中文标题】保存到数据存储失败:操作无法完成。 (可可错误 133020。)【英文标题】:Failed to save to data store: The operation couldn’t be completed. (Cocoa error 133020.) 【发布时间】:2011-01-07 11:56:34 【问题描述】:我正在开发相当复杂的应用程序,其中包含巨大的同步过程 beetwen 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]);
工厂类描述为here,但可能存在同步过程后未准确刷新的上下文的问题。
【问题讨论】:
你使用 NSUndoManager 吗?请记住,必须在使用它的线程中创建 NSManagedObjectContext。 我没有使用 UndoManager,我意识到关于 init context 在准确线程中的事实。 【参考方案1】:根据:
http://developer.apple.com/library/ios/#documentation/cocoa/Reference/CoreDataFramework/Miscellaneous/CoreData_Constants/Reference/reference.html
那个错误是 NSManagedObjectMergeError:
表示合并的错误代码 策略失败——Core Data 无法 完成合并。
NSError 对象可能有助于解码此错误。你能发布你用来插入新数据的代码吗?
【讨论】:
我在上面发布了答案:) 您最初在问题中发布的错误是下面 NSLog 的结果吗? 看起来改变合并策略以覆盖对我来说有帮助。更多详情developer.apple.com/library/ios/#documentation/cocoa/Reference/…,感谢您帮助寻找解决方案。以上是关于保存到数据存储失败:操作无法完成。 (可可错误 133020。)的主要内容,如果未能解决你的问题,请参考以下文章
NSValidationMissingMandatoryPropertyError - 操作无法完成。 (可可错误 1570。)