2016-12-06 34 views
2

我試圖追加一個名爲Timeline(誰是消息員)的CoreData中包含TreeUser關係的獲取實體。爲什麼將一個coreData實體附加到一個設置爲零關係的數組中?

當我嘗試從CoreData中獲取它時,所有的都是好的,用戶和樹存在並且沒有設置爲nil。但是當我將它添加到我的數組中時,用戶關係消失,但樹不是,只有數組中的最後一個Timeline實體保留兩者的引用。

這裏我環路上的JSON,我取Timeline從CoreData的ID或創建它,如果CoreData不知道他裏面Timeline.get(withJSON:_, inManagedObjectContext:_)

Timeline entitie from core data : 
<myApp.Timeline: 0x6080002a1560> (entity: Timeline; id: 0xd0000000046c0006 <x-coredata://D5FDDD6B-2A13-4B03-B592-45C99D801439/Timeline/p283> ; data: { 
    createdAt = "2016-12-03 17:25:21 +0000"; 
    id = 21; 
    message = "blablabla"; 
    tree = "0x60800023fa20 <x-coredata:///Tree/t742495B8-E258-4C42-8E69-AC9776194B7A22>"; 
    updatedAt = "2016-12-03 17:25:21 +0000"; 
    url = nil; 
    user = "0xd000000000080000 <x-coredata://D5FDDD6B-2A13-4B03-B592-45C99D801439/User/p2>"; 
}) 


Timeline entitie from core data : 
<myApp.Timeline: 0x6000000bc620> (entity: Timeline; id: 0xd0000000047c0006 <x-coredata://D5FDDD6B-2A13-4B03-B592-45C99D801439/Timeline/p287> ; data: { 
    createdAt = "2016-12-04 12:17:23 +0000"; 
    id = 22; 
    message = "jaw dawd awdkj alwkjd alwkjd lawkjd lakwjd lakwjdl kawjl dkajwldkja wlkdjawl kjdawlk jdawlkjaw lkjawlkawjlkw aj lkawjd lkawjd lkjawdl kjawd awdl kajwldk jawlkjd lakwj dlakwj ldkajw lkdjawlk jlakwjd la"; 
    tree = "0x6000002354c0 <x-coredata:///Tree/t742495B8-E258-4C42-8E69-AC9776194B7A23>"; 
    updatedAt = "2016-12-04 12:17:23 +0000"; 
    url = nil; 
    user = "0xd000000000080000 <x-coredata://D5FDDD6B-2A13-4B03-B592-45C99D801439/User/p2>"; 
}) 

Timeline entitie from core data : 
<myApp.Timeline: 0x6080002a1b60> (entity: Timeline; id: 0xd000000004800006 <x-coredata://D5FDDD6B-2A13-4B03-B592-45C99D801439/Timeline/p288> ; data: { 
    createdAt = "2016-12-04 15:19:02 +0000"; 
    id = 30; 
    message = "Niche"; 
    tree = "0x6080004279e0 <x-coredata:///Tree/t742495B8-E258-4C42-8E69-AC9776194B7A31>"; 
    updatedAt = "2016-12-04 15:19:02 +0000"; 
    url = nil; 
    user = "0xd000000000080000 <x-coredata://D5FDDD6B-2A13-4B03-B592-45C99D801439/User/p2>"; 
}) 
:我內環絕版

var timelines = [Timeline]() 
for jsonRow in json.arrayValue { 
    if let timeline = Timeline.get(withJSON: jsonRow, inManagedObjectContext: context) { 

     print("Timeline entitie from core data :\n", timeline) 
     timelines.append(timeline) 
    } 
} 

print("timelines array:\n", timelines) 

結果

這裏我的陣列的結果:

timelines array: 
[<myApp.Timeline: 0x6080002a1560> (entity: Timeline; id: 0xd0000000046c0006 <x-coredata://D5FDDD6B-2A13-4B03-B592-45C99D801439/Timeline/p283> ; data: { 
    createdAt = "2016-12-03 17:25:21 +0000"; 
    id = 21; 
    message = "blablabla"; 
    tree = "0x60800023fa20 <x-coredata:///Tree/t742495B8-E258-4C42-8E69-AC9776194B7A22>"; 
    updatedAt = "2016-12-03 17:25:21 +0000"; 
    url = nil; 
    user = nil; 
}), <myApp.Timeline: 0x6000000bc620> (entity: Timeline; id: 0xd0000000047c0006 <x-coredata://D5FDDD6B-2A13-4B03-B592-45C99D801439/Timeline/p287> ; data: { 
    createdAt = "2016-12-04 12:17:23 +0000"; 
    id = 22; 
    message = "jaw dawd awdkj alwkjd alwkjd lawkjd lakwjd lakwjdl kawjl dkajwldkja wlkdjawl kjdawlk jdawlkjaw lkjawlkawjlkw aj lkawjd lkawjd lkjawdl kjawd awdl kajwldk jawlkjd lakwj dlakwj ldkajw lkdjawlk jlakwjd la"; 
    tree = "0x6000002354c0 <x-coredata:///Tree/t742495B8-E258-4C42-8E69-AC9776194B7A23>"; 
    updatedAt = "2016-12-04 12:17:23 +0000"; 
    url = nil; 
    user = nil; 
}), <myApp.Timeline: 0x6080002a1b60> (entity: Timeline; id: 0xd000000004800006 <x-coredata://D5FDDD6B-2A13-4B03-B592-45C99D801439/Timeline/p288> ; data: { 
    createdAt = "2016-12-04 15:19:02 +0000"; 
    id = 30; 
    message = "Niche"; 
    tree = "0x6080004279e0 <x-coredata:///Tree/t742495B8-E258-4C42-8E69-AC9776194B7A31>"; 
    updatedAt = "2016-12-04 15:19:02 +0000"; 
    url = nil; 
    user = "0xd000000000080000 <x-coredata://D5FDDD6B-2A13-4B03-B592-45C99D801439/User/p2>"; 
})] 

謝謝如果喲你已經得到了答案,六行代碼從來沒有讓我如此瘋狂......

回答

0

它看起來像TimelineUser是一對一的關係。在循環中,您將給予每個Timeline相同的User。當你這樣做時,他們看起來很好。但由於這種關係是一對一的關係,因此每次將User分配給新的Timeline時,您也不會刪除以前的關係值。每個User只能有一個Timeline,因此,當您將User指定爲新的Timeline時,舊的值將獲得該關係的零值。這就是爲什麼它是最後一個具有非零值的原因,因爲它是唯一一個不會在循環的下一個循環中被更改的值。

做什麼取決於您的應用程序的工作方式。

  • 如果每個User應該只有一個Timeline,解決您的循環每次分配不同User
  • 如果每個User可以具有多於一個Timeline,固定的關係是一個對多從UserTimeline
+0

不,實際上'用戶'與'時間線'有一對多的關係。 'Timeline'是'User'內的NSSet,Timeline有'User'的特性。這是我查過的第一件事...... –

+0

這很奇怪,因爲你的結果是一個完美的例子,說明如果關係是一對一而不是對一對多時會發生什麼。 –

+0

你認爲這可能是我的基於Coredata Xcode 8模型的'User'實體和Coredata XCode 7.3中的'Timeline'之間的區別嗎? –

相關問題