有没有人知道为什么Xcode没有识别我为我的实体设置的属性?
在这段代码中,"作者"属性工作正常:
func createBook() {
let entityDescription = NSEntityDescription.entityForName("Books", inManagedObjectContext: managedObjectContext!)
let book = Books(entity: entityDescription!, insertIntoManagedObjectContext: managedObjectContext)
book.name = bookName.text
book.author = authorField.text
managedObjectContext?.save(nil)
}
然而,在我的TableViewController中的一个函数中,它表示" book"没有属性" authors":
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as! UITableViewCell
let book: AnyObject = newBookViewController.fetchedResultsController.objectAtIndexPath(indexPath)
cell.textLabel?.text = book.name
cell.detailTextLabel?.text = book.author
return cell
此外,当我在实体检查器中向Books实体添加更多属性时,即使第一个函数也无法识别它们。另外,这是一次保存多个属性的正确方法吗?
func bookFetchRequest() -> NSFetchRequest {
let fetchRequest = NSFetchRequest(entityName: "Books")
let nameSortDescriptor = NSSortDescriptor(key: "name", ascending: true)
let authorSortDescriptor = NSSortDescriptor(key: "author", ascending: true)
fetchRequest.sortDescriptors = [nameSortDescriptor]
fetchRequest.sortDescriptors = [authorSortDescriptor]
return fetchRequest
}
答案 0 :(得分:1)
为了让编辑知道你的书有作者,它必须知道它是一本书。
let book: AnyObject = newBookViewController.fetchedResultsController.objectAtIndexPath(indexPath)
将book声明为AnyObject,这是objectAtIndexPath默认返回的内容。既然你知道它是一本书,你可以把它当成这样的书:
let book = newBookViewController.fetchedResultsController.objectAtIndexPath(indexPath) as! Books
不幸的是,在身份检查器中添加属性不会自动将它们添加到现有的NSManagedObject中。假设您创建了没有类型字段的Books模型,并且您希望稍后添加它,您可以在身份检查器中添加它然后添加
@NSManaged var genre: String
到Books课程。
如果您想在获取请求中使用多个排序描述符(例如,按作者排序,对同一作者的书籍排序,按名称排序),那么您可以
fetchRequest.sortDescriptors = [authorSortDescriptor, nameSortDescriptor]