【问题标题】:Creating one -> many relationships for a shopping list application swift 2为购物清单应用程序 swift 2 创建一个 -> 多个关系
【发布时间】:2015-12-10 21:00:59
【问题描述】:

我有以下关系

这个想法是一个“列表”实体将可以访问许多“项目列表”实体,即一个列表将包含多个项目。我尝试通过以下方式将项目添加到列表实体:

    let newList = NSEntityDescription.insertNewObjectForEntityForName("List", inManagedObjectContext: context) as! List
    newList.name = listName
    newList.shoppingDate = shoppingTripDate
    newList.eventDate = eventDate

    let itemEnt = NSEntityDescription.insertNewObjectForEntityForName("ItemList", inManagedObjectContext: context) as! ItemList
    itemEnt.item = "Eggs"
    itemEnt.list = newList

ItemEnt.list = newList 将两者连接起来,如上图所示。

但是,在另一个视图控制器中,我从核心数据中检索此对象并尝试访问其 item 属性,如下所示:

shoppingListObject!.itemList!.item

这会使程序崩溃。

我是否遗漏了什么或做错了什么?

编辑: 这是它在终端中产生的错误

*** 由于未捕获的异常 'NSInvalidArgumentException' 导致应用程序终止,原因:'-[_NSFaultingMutableSet item]: unrecognized selector sent to instance 0x7fd0a4951960'

【问题讨论】:

  • 对我来说看起来不错。你能展示更多另一个视图控制器的代码吗?
  • 应用程序崩溃时会出现什么错误?有无数种情况会导致崩溃,而错误会缩小范围并经常直接指出问题所在。
  • 我想知道这是否可以编译。 itemList 应该是一对多关系的 set
  • 我认为@MartinR 是对的。 @MattSpoon:这有帮助吗? let listItems = shoppingListObject!.itemList!.allObjects as! [ItemList]

标签: ios swift core-data relationships


【解决方案1】:

该错误告诉您itemListNSSet。这是有道理的,因为这就是 Core Data 的多对多关系的工作方式。它还告诉您NSSet 没有名为item 的方法,这也是有道理的。您试图在 NSSet 上调用 NSSet 没有的方法,这就是应用崩溃的原因。

从您的模型图中,shoppingListObject!.itemList!ItemList 实例的NSSet。您可以使用 NSSet 方法访问单个实例。

但我同意 Martin 的评论——奇怪的是你能够编译这段代码。 Swift 应该能够捕捉到这一点,除非你正在做一些不寻常的事情来阻止它这样做。

【讨论】:

    猜你喜欢
    • 2019-06-09
    • 2018-08-03
    • 2018-12-16
    • 1970-01-01
    • 2013-11-03
    • 2021-07-31
    • 2014-02-27
    • 1970-01-01
    • 2011-05-06
    相关资源
    最近更新 更多