swift - 为什么我的 fetchRequest 返回 nil?

标签 swift core-data nsfetchrequest

我的提取请求从一个实体返回 nil,我认为我已经成功地将数据放入该实体中,经过数小时的调试后,我一直无法弄清楚。 (免责声明:我在这里查看了无数关于获取请求和解包选项的线程,但我发现的每个线程都是关于如何处理解包错误的。我请求帮助弄清楚为什么我的获取请求是当我认为应该返回记录时却没有返回记录。)

在我要显示数据的 View Controller 中,我在 viewWillAppear 中有这个:

class LiftLogTableViewController: UITableViewController {

    var managedObjectContext: NSManagedObjectContext!
    var liftEvents = [LiftEvent]() 

    override func viewWillAppear(animated: Bool) {
        super.viewWillAppear(animated)

    let fetchRequest = NSFetchRequest(entityName: "LiftEvent")

    do {
      if let results = try managedObjectContext.executeFetchRequest(fetchRequest) as? [LiftEvent] {
        liftEvents = results  <---- nil error happening here

        }
    }  catch {
      fatalError("Error fetching data!")
    }
  }

但我相信那里有一条记录,因为在 AppDelegate.addData() 中我已经这样做了:

    // create a lift event in LiftEvent
    let liftEvent = LiftEvent(entity: liftEventEntity, insertIntoManagedObjectContext: managedObjectContext)

    let dateStr = "05-27-2016"
    let dateFormatter = NSDateFormatter()
    dateFormatter.dateFormat = "MM-dd-yyyy"
    let date: NSDate = dateFormatter.dateFromString(dateStr)!

    liftEvent.date = date
    liftEvent.liftEventUid = 1
    liftEvent.liftUid = 1
    liftEvent.formulaUid = 1
    liftEvent.maxAmount = 250

    print("Added lift ID: \(liftEvent.liftEventUid) lift ID: \(liftEvent.liftUid) weight: \(liftEvent.maxAmount) formula: \(liftEvent.formulaUid) ")

    saveContext()

  }

func saveContext () {
    if managedObjectContext.hasChanges {
      do {
        try managedObjectContext.save()
      } catch {
        // Replace this implementation with code to handle the error appropriately.
        // abort() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development.
        let nserror = error as NSError
        NSLog("Unresolved error \(nserror), \(nserror.userInfo)")
        abort()
      }
    }
  }

我正在学习 CoreData,所以此时我必须假设我缺少一些基本的东西。

提前致谢。

最佳答案

假设您使用的是标准 Core Data 模板,您需要为 LiftLogTableViewController 类中的 managementObjectContext 属性分配一个值。

例如在viewDidLoad

override func viewDidLoad() {
  super.viewDidLoad()
  let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
  managedObjectContext = appDelegate.managedObjectContext
}

但是,推荐的方法是通过 segue 传递上下文。

关于swift - 为什么我的 fetchRequest 返回 nil?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37503027/

相关文章:

ios - 此类对于键取消不符合键值编码

ios - 在 addSubview 期间奇怪地复制 UIView

ios - 如何在 swift 中解析整个 rss feed xml 数据

ios - tableView显示标题使用核心数据(关系)

Swift: boolean 属性和 KVC 之谜

objective-c - 核心数据 NSArrayController 不保存或撤消编程元素

objective-c - 谓词适用于数组,但不适用于fetchRequest

ios - 编辑核心数据会产生错误,此类与键的键值编码不兼容

ios - 自定义交互过渡动画

iphone - 带有 NSdate 谓词的 NSFetchrequest