为什么Xcode无法识别核心数据实体的属性

时间:2015-07-25 00:03:31

标签: ios xcode swift core-data

有没有人知道为什么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
    }

1 个答案:

答案 0 :(得分:1)

  1. 为了让编辑知道你的书有作者,它必须知道它是一本书。

    let book: AnyObject = newBookViewController.fetchedResultsController.objectAtIndexPath(indexPath)
    

    将book声明为AnyObject,这是objectAtIndexPath默认返回的内容。既然你知道它是一本书,你可以把它当成这样的书:

    let book = newBookViewController.fetchedResultsController.objectAtIndexPath(indexPath) as! Books
    
  2. 不幸的是,在身份检查器中添加属性不会自动将它们添加到现有的NSManagedObject中。假设您创建了没有类型字段的Books模型,并且您希望稍后添加它,您可以在身份检查器中添加它然后添加

    @NSManaged var genre: String
    

    到Books课程。

  3. 如果您想在获取请求中使用多个排序描述符(例如,按作者排序,对同一作者的书籍排序,按名称排序),那么您可以

    fetchRequest.sortDescriptors = [authorSortDescriptor, nameSortDescriptor]