【发布时间】:2015-06-22 17:58:20
【问题描述】:
我有一个包含两个实体的测试应用程序,文件夹与另一个名为 List 的对象的关系为 To Many。
在我的故事板中,我有一个带有已创建文件夹列表的 tableview 控制器。当点击一个文件夹时,我会转到另一个 TableView 传递 selectedFolder,它应该显示保存到 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)")
}
}
【问题讨论】:
-
你的代码崩溃了吗?你是如何使用副本的,是否可以将副本与 NSManagedObject 一起使用?您应该使用生成的核心数据方法或使用 kvc 获取 mutableSetValueForKey: 目标对象上的方法来获取可变集。
-
Folder类是您所说的Event吗?Folder的list属性是否被描述为checklist?? -
将
list.copy()分配给selectedFolder.list毫无意义,您的意思是selectedFolder.list = folder吗? -
@MartinR 抱歉更新了代码。我把它改成了
selectedFolder.list = folder,我相信现在可以了。只是修复另一个错误以将 Set 视为数组。 -
@JUSDEV:这就是我提供的答案,以及替代解决方案:)