我在使用 Swift 的 Core Data 中使用多对多关系时遇到了一些困难。

我的数据模型

我想要做的是使用 Country 的实例,然后显示所有属于该国家/地区公民的 Contacts。由于我一直在尝试这样做,因此我构建了一个 UITableViewController 来显示该国的所有公民。但是,我在从 Contacts 关系中获取实际 citizensOfCountry 时遇到了重大问题。这是我正在使用的代码(仅相关部分)。

class ShowingCitizensOfCountry: UITableViewController {

     var countryToShow: Country?
     //This is a value that is passed by a prepareForSegue method
     override func viewDidLoad() {
          //how do I get a list/set/other iterable object of Contacts?

          //***Line in question***
          let listOfPeople = countryToShow!.citizensOfCountry

          for citizen in listOfPeople {
              println(citizen)//THIS IS NOT WORKING
          }

     }

所以,这根本行不通。现在在 for 循环中,我收到一个编译器错误,上面写着 Type 'Contacts' does not conform to protocol 'Sequence Type' 。我不明白的是,它只是 Contact 类型...我认为这将是某种集合。所以,这不起作用,所以我尝试了这个。
let listOfPeople = countryToShow!.citizensOfCountry as! [Contacts]

这也不起作用,并且我收到错误'NSArray' is not a subtype of 'Contacts'。接下来我尝试使用 NSSet 进行转换。
let listOfPeople = countryToShow!.citizensOfCountry as! NSSet<Contacts>

不幸的是,这也不起作用,我收到警告 Cast from 'Contacts' to unrelated type 'NSSet' always failsCannot specialize non-generic type 'NSSet' 。接下来,我尝试了其他方法。我尝试使用 valueForKey 方法。
let listOfPeople = countryToShow!.citizensOfCountry.valueForKey("name") as! Set<String>

这有效!我可以只打印出该国所有公民的姓名。但是我不明白为什么。为什么当我使用 valueForKey("name") 但我无法获得个人联系人时它有效?有没有更好的方法来做到这一点,我只是错过了?非常感谢有关为什么我无法从单个 Contacts 获取 Country 集合的任何解释。谢谢。

最佳答案

对不起,因为我真的很累,我无法阅读所有内容。但是从我读过的书中,您想得到一个应该是NSSet的国家的公民。要做到这一点,您只需执行以下操作:

let contacts = yourArrayOfCountries.flatMap {
    $0.citizensOfCountry.allObjects as! [Contacts]
}

根据您的评论:
let contacts = countryToShow!.citizensOfCountry.allObjects as! [Contacts]

10-08 05:31
查看更多