【发布时间】:2016-04-04 12:56:37
【问题描述】:
我一直在努力解决我正在开发的应用程序中的 NSMergeConflict。我知道我可以更改合并策略,但我担心可能会损坏数据,因为我不知道哪些冲突对象是正确的,哪些是过时的。更复杂的是,合并冲突实际上不在我正在修改和保存的对象中。相反,它似乎来自一些我没有直接修改的相关对象。
关系图如下所示:
Order <<-----> Customer
Order <<-----> Rep
Rep <<-----> Customer
Order 是我正在修改和保存的对象,Customer 和 Rep 是合并错误所抱怨的对象。
我真的不知道如何调试此问题并跟踪我的数据在哪里不同步。有谁知道获取有关我的代码中正在发生的事情的更多数据的好方法?有没有办法记录所有持久性上下文中的内容并查看它们的分歧点?
更新: 我更改了 Order 和 Rep 之间的关系,这样 Rep 不再拥有 Orders 集合,从而解决了一些问题。不幸的是,该解决方案不适用于 Order 和 Customer 之间的关系,我仍然看到错误。
这是我得到的错误的示例堆栈跟踪:
NSMergeConflict (0x1465972e0) for NSManagedObject (0x1462147a0) with objectID '0xd000000000a00008 <x-coredata://1F648314-CA44-4DA5-B437-07BFCB96D1E9/Customer/p40>' with oldVersion = 13 and newVersion = 14 and old object snapshot = {
address = "{\n cmpnts = (\n {\n \"long_name\" = \"2318 W 5TH AVE\";\n \"short_name\" = \"2318 W 5TH AVE\";\n types = (\n \"street_address\"\n );\n },\n {\n \"long_name\" = GARY;\n \"short_name\" = GARY;\n types = (\n locality\n );\n },\n {\n \"long_name\" = IN;\n \"short_name\" = IN;\n types = (\n \"administrative_area_level_1\"\n );\n },\n {\n \"long_name\" = \"Lake County\";\n \"short_name\" = \"Lake County\";\n types = (\n \"administrative_area_level_2\"\n );\n },\n {\n \"long_name\" = \"46404-1331\";\n \"short_name\" = \"46404-1331\";\n types = (\n \"postal_code\"\n );\n }\n );\n lat = \"41.60221\";\n lng = \"-87.366285\";\n loc = \"2318 W 5TH AVE, GARY, IN, 46404-1331\";\n}";
buyingGroup = "<null>";
compositeName = "20/20 EYE SPECIALIST (#385468)";
created = "2014-10-29 19:36:43 +0000";
"created_by_id" = 5451215fe4b007ffb46431bf;
"current_due" = 0;
customer = 385468;
customerTotal = "0xd0000000db74000a <x-coredata://1F648314-CA44-4DA5-B437-07BFCB96D1E9/CustomerTotals/p14045>";
detail = "0xd00000000504000c <x-coredata://1F648314-CA44-4DA5-B437-07BFCB96D1E9/CustomerDetail/p321>";
"device_address_section_key" = 2;
"device_address_sort_key" = "2318 W 5TH AVE";
"device_city_section_key" = G;
"device_city_sort_key" = GARY;
"device_corp_ytd_gross" = 0;
"device_created_section_key" = "01/01/1980";
"device_customer_section_key" = 3;
"device_deleted" = 0;
"device_exported" = "<null>";
"device_last_view" = "2016-04-12 17:04:51 +0000";
"device_latitude" = "41.60221";
"device_loaded" = "2016-04-12 15:25:07 +0000";
"device_longitude" = "-87.366285";
"device_name_section_key" = 2;
"device_note_date" = "<null>";
"device_note_text" = "<null>";
"device_phone_section_key" = 2;
"device_phone_sort_key" = 2198850116;
"device_rolling_12_credits" = 0;
"device_rolling_12_net" = 0;
"device_rolling_12_rd" = 0;
"device_rolling_12_rx" = 0;
"device_state_section_key" = I;
"device_state_sort_key" = IN;
"device_updated" = "<null>";
"device_ytd_credits" = 0;
"device_ytd_gross" = 0;
"device_ytd_net" = 0;
"device_ytd_rd" = 0;
"device_ytd_rx" = 0;
"device_zip_section_key" = 4;
"device_zip_sort_key" = "46404-1331";
"dw_fax" = "";
"dw_open_date" = "1980-01-01 05:00:00 +0000";
"is_inherited" = 0;
jobsonCensus = "0xd000000001a4000e <x-coredata://1F648314-CA44-4DA5-B437-07BFCB96D1E9/JobsonCensus/p105>";
"jobson_census_id" = 5494225284aec464730b3aa1;
"last_order_date" = "<null>";
"last_sync" = "2016-04-12 15:58:20 +0000";
name = "20/20 EYE SPECIALIST";
primaryContact = "<null>";
"remote_id" = 545141cbe4b024c7a6033055;
"updated_at" = "2015-09-15 11:48:11 +0000";
"updated_by_id" = "<null>";
} and new cached row = {
address = "{\n cmpnts = (\n {\n \"long_name\" = \"2318 W 5TH AVE\";\n \"short_name\" = \"2318 W 5TH AVE\";\n types = (\n \"street_address\"\n );\n },\n {\n \"long_name\" = GARY;\n \"short_name\" = GARY;\n types = (\n locality\n );\n },\n {\n \"long_name\" = IN;\n \"short_name\" = IN;\n types = (\n \"administrative_area_level_1\"\n );\n },\n {\n \"long_name\" = \"Lake County\";\n \"short_name\" = \"Lake County\";\n types = (\n \"administrative_area_level_2\"\n );\n },\n {\n \"long_name\" = \"46404-1331\";\n \"short_name\" = \"46404-1331\";\n types = (\n \"postal_code\"\n );\n }\n );\n lat = \"41.60221\";\n lng = \"-87.366285\";\n loc = \"2318 W 5TH AVE, GARY, IN, 46404-1331\";\n}";
buyingGroup = "<null>";
compositeName = "20/20 EYE SPECIALIST (#385468)";
created = "2014-10-29 19:36:43 +0000";
"created_by_id" = 5451215fe4b007ffb46431bf;
"current_due" = 0;
customer = 385468;
customerTotal = "0xd0000000db74000a <x-coredata://1F648314-CA44-4DA5-B437-07BFCB96D1E9/CustomerTotals/p14045>";
detail = "0xd00000000504000c <x-coredata://1F648314-CA44-4DA5-B437-07BFCB96D1E9/CustomerDetail/p321>";
"device_address_section_key" = 2;
"device_address_sort_key" = "2318 W 5TH AVE";
"device_city_section_key" = G;
"device_city_sort_key" = GARY;
"device_corp_ytd_gross" = 0;
"device_created_section_key" = "01/01/1980";
"device_customer_section_key" = 3;
"device_deleted" = 0;
"device_exported" = "<null>";
"device_last_view" = "2016-04-12 17:04:51 +0000";
"device_latitude" = "41.60221";
"device_loaded" = "2016-04-12 15:25:07 +0000";
"device_longitude" = "-87.366285";
"device_name_section_key" = 2;
"device_note_date" = "<null>";
"device_note_text" = "<null>";
"device_phone_section_key" = 2;
"device_phone_sort_key" = 2198850116;
"device_rolling_12_credits" = 0;
"device_rolling_12_net" = 0;
"device_rolling_12_rd" = 0;
"device_rolling_12_rx" = 0;
"device_state_section_key" = I;
"device_state_sort_key" = IN;
"device_updated" = "<null>";
"device_ytd_credits" = 0;
"device_ytd_gross" = 0;
"device_ytd_net" = 0;
"device_ytd_rd" = 0;
"device_ytd_rx" = 0;
"device_zip_section_key" = 4;
"device_zip_sort_key" = "46404-1331";
"dw_fax" = "";
"dw_open_date" = "1980-01-01 05:00:00 +0000";
"is_inherited" = 0;
jobsonCensus = "0xd000000001a4000e <x-coredata://1F648314-CA44-4DA5-B437-07BFCB96D1E9/JobsonCensus/p105>";
"jobson_census_id" = 5494225284aec464730b3aa1;
"last_order_date" = "<null>";
"last_sync" = "2016-04-12 16:06:52 +0000";
name = "20/20 EYE SPECIALIST";
primaryContact = "<null>";
"remote_id" = 545141cbe4b024c7a6033055;
"updated_at" = "2015-09-15 11:48:11 +0000";
"updated_by_id" = "<null>";
}
【问题讨论】:
-
为什么投反对票?如果问题有问题,请告诉我,以便我解决。
-
不知道你为什么投了反对票,但你可以添加一些东西来帮助我们帮助你。你能告诉我们你的合并冲突的描述吗?您的核心数据堆栈设置如何?你是如何编写/编辑你的对象的?您为我们提供的背景越多,我们就越能提供帮助。
-
不确定这是否有帮助,但您可以尝试在保存之前将客户和代表对象恢复为故障。
标签: ios swift core-data runtime-error magicalrecord