Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Core data 在CoreData NSManaged关系中使用类型化集_Core Data_Swift2_Xcode7_Nsset - Fatal编程技术网

Core data 在CoreData NSManaged关系中使用类型化集

Core data 在CoreData NSManaged关系中使用类型化集,core-data,swift2,xcode7,nsset,Core Data,Swift2,Xcode7,Nsset,当您创建托管对象关系(即一对多)然后创建NSManagedObject子类时,您将对该关系进行如下编码: @NSManaged var dogs: NSSet 但我发现你可以写: @NSManaged var dogs: Set<Dog> @nsvar狗:设置 在我看来,这更方便,因为你有一个类型集,在Swift中的转换非常冗长 编辑: 事实上,我发现您可以使用集合的insert和remove方法,这样就更容易了 我知道Swift自动从一些基础类到SWIFT类(即 NSArra

当您创建托管对象关系(即一对多)然后创建NSManagedObject子类时,您将对该关系进行如下编码:

@NSManaged var dogs: NSSet
但我发现你可以写:

@NSManaged var dogs: Set<Dog>
@nsvar狗:设置
在我看来,这更方便,因为你有一个类型集,在Swift中的转换非常冗长

编辑: 事实上,我发现您可以使用集合的
insert
remove
方法,这样就更容易了

我知道Swift自动从一些基础类到SWIFT类(即<代码> NSArray <代码> >代码>数组< /COD>和<代码> NSSET > <代码> SET 但我在或任何其他教程中都没有找到使用Swift类型集实现核心数据管理对象子类的方法,我想知道为什么


我正在使用Xcode 7.2和Swift 2,它在我的项目中运行良好。它是否也适用于其他人?什么地方有苹果医生?还是因为某种原因我错过了一个坏主意

是的,据我所知,这是许多开发人员的常见做法

事实上,生成的
NSManagedObject
子类对于生成的类型来说并不完美。例如,原语仍然存在问题,
NSNumber
有时会成功地桥接到
Bool
,有时则不会。我经常不得不修改可选状态


如果您离开预设的
NSSet
,您仍然可以强制转换为
Set
,这就是我在养成习惯之前所做的,将生成的子类的许多属性更改为类型化集

它是有效的,是一个很好的方法。我已经在我的几个项目中这样做了。谢谢@PetahChristian的确认。@PetahChristian你能确认
集合的
插入
删除
方法也有效吗?因为它对我有效,然后我发现添加
@NSManaged addX
函数的方法非常愚蠢。事实上,我今天在自己的网站上发现了,我想知道是否有一些苹果文档(博客条目或教程也可以),因为我觉得这非常有用。如果你能提供一个链接来证实关于惯例的说法,我很乐意接受你的回答。我看不出一篇博客文章比经验丰富的StackOverflow成员拥有更多的权威。事实上,许多博客条目和教程都有错误和遗漏。我可以证实,苹果没有在官方文件中提到这一点(这是不必要的,有充分的理由)。我可以通过技术解释的方式提供更多细节,或者进一步说明
NSSet
约定是如何从Objective-C遗留下来的,但我认为这没有任何生产价值。因为您指出这是一种常见做法。我还回顾了苹果官方文档和WWDC,以及它们使用的
NSSet
示例,我也没有发现任何StackOverflow问题(除了我自己回答的几个问题)。问题是,这是否适用于其他人(已经证实),以及为什么没有在其他地方提及。