我有一个包含两个实体的测试应用程序,文件夹的关系为 To Many 与另一个名为 List 的对象。
在我的 Storyboard中,我有一个带有创建文件夹列表的 tableview Controller 。当点击一个文件夹时,我转到另一个传递 selectedFolder
的 TableView,它应该显示保存到 selectedFolder 的 List 有序集。我有一个模态似乎将一个项目添加到列表中。
不幸的是,我无法将列表保存到 selectedFolder 有序集。我在执行保存函数 unrecognized selector sent to instance
时收到一个错误,这个错误是因为以下行:
selectedFolder.list = list.copy() as! NSOrderedSet
我不确定我在保存功能上做错了什么,想知道是否有人可以提供帮助,将不胜感激。
文件夹子类:
class Folder: NSManagedObject {
@NSManaged var title: String
@NSManaged var details: String
@NSManaged var date: NSDate
@NSManaged var list: NSOrderedSet
}
列表子类
class List: NSManagedObject {
@NSManaged var item: String
@NSManaged var folder: Event
}
模态视图将列表添加到选定的文件夹有序集。
class PopoverViewController: UIViewController {
//selectedFolder passed from segue. Works fine displays title of folder
var selectedFolder: Folder!
@IBOutlet weak var popoverTextField: UITextView!
override func viewDidLoad() {
super.viewDidLoad()
self.popoverTextField.becomeFirstResponder()
// Do any additional setup after loading the view.
}
@IBAction func addListItem(sender: AnyObject) {
//Get the context
let moc = (UIApplication.sharedApplication().delegate as! AppDelegate).managedObjectContext
//get entity details
let entity = NSEntityDescription.entityForName("List", inManagedObjectContext: moc!)
//Create the managed object to be inserted
let list = List(entity: entity!, insertIntoManagedObjectContext: moc!)
// Add Text
list.item = popoverTextField.text
//Insert the new checklist into the folder set
var folder = selectedFolder.list.mutableCopy() as! NSMutableOrderedSet
folder.addObject(list)
selectedFolder.list = list.copy() as! NSOrderedSet
//Error check & Save
var error: NSError?
if moc!.save(&error){
println("Could not save: \(error)")
}
}
最佳答案
最后一个赋值没有意义,因为 list
是一个 List
对象而不是(有序)集合,顺便说一句。这会计算一个 folder
变量
然后被忽略。
你可能的意思(这应该有效)是
var folder = selectedFolder.list.mutableCopy() as! NSMutableOrderedSet
folder.addObject(list)
selectedFolder.list = folder
正如评论中已经提到的,添加到有序关系
有点棘手,但可以通过键值编码来完成
let mutableChecklist = selectedFolder.mutableOrderedSetValueForKey("list")
mutableChecklist.addObject(list)
(比较 Exception thrown in NSOrderedSet generated accessors 和 Setting an NSManagedObject relationship in Swift 。)
然而,在一对多关系的情况下,最简单的方法
是设置关系的另一个方向:
list.folder = selectedFolder
关于ios - 添加到托管对象有序集,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30986718/