添加到托管对象有序集

时间:2015-06-22 17:58:20

标签: ios swift core-data

我有一个测试应用程序,其中包含两个实体,一个关系为 To Many 的文件夹与另一个名为List的对象。

在我的故事板中,我有一个tableview控制器,其中包含已创建文件夹的列表。当点击文件夹时,我会转到另一个传递selectedFolder的TableView,它应该显示保存到selectedFolder的List有序集。我有一个模态,似乎将一个项目添加到列表中。

不幸的是,我无法将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)")
    }
}

1 个答案:

答案 0 :(得分:4)

var folder = selectedFolder.list.mutableCopy() as! NSMutableOrderedSet
folder.addObject(list)
selectedFolder.list = list.copy() as! NSOrderedSet

最后一项任务没有意义,因为listList对象而不是(有序)集合,而且顺便说一下。这会计算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 accessorsSetting an NSManagedObject relationship in Swift。)

然而,在一对多关系的情况下,最简单的方法 是设置关系的其他方向

list.folder = selectedFolder
相关问题