gpt4 book ai didi

swift - 为什么将 coreData 实体附加到设置为 nil 关系的数组中?

转载 作者:搜寻专家 更新时间:2023-11-01 05:35:43 24 4
gpt4 key购买 nike

我试图附加一个从 CoreData 中获取的名为 Timeline 的实体(它是一个消息帖子),它包含一个 Tree 和一个 User 关系。

当我尝试从 CoreData 获取它时一切正常,一个用户和一个树存在并且没有设置为 nil。但是当我将它添加到我的数组时,用户关系消失但树没有,只有数组中的最后一个 Timeline 实体保留对两者的引用。

这是我在 json 上的循环,我通过 id 从 CoreData 获取 Timeline 或者如果 CoreData 在 Timeline.get(withJSON:_, inManagedObjectContext:_) :

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)

我的打印内循环结果:

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

这里是我的数组的结果:

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

谢谢,如果你有答案,六行代码从来没有让我如此疯狂......

最佳答案

看起来TimelineUser 之间的关系是一对一的。在循环中,您为每个 Timeline 赋予相同的 User。当您这样做时,它们看起来还不错。但由于关系是一对一的,每次您将 User 分配给新的 Timeline 时,您也会将关系的先前值清零。每个 User 只能有一个 Timeline,因此当您将 User 分配给新的 Timeline 时,旧的获得关系的零值。这就是为什么它是最后一个具有非零值的原因,因为它是唯一一个在下一次循环中不会改变的。

要做什么取决于您的应用的工作方式。

  • 如果每个 User 应该只有一个 Timeline,请修复您的循环以每次分配不同的 User
  • 如果每个 User 可能有多个 Timeline,将关系固定为从 UserTimeline 的一对多关系

关于swift - 为什么将 coreData 实体附加到设置为 nil 关系的数组中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41006538/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com