Core data 如何写入不同视图控制器(也包括swift文件)中相同索引处的CoreData实体

Core data 如何写入不同视图控制器(也包括swift文件)中相同索引处的CoreData实体,core-data,nsfetchedresultscontroller,nsmanagedobject,Core Data,Nsfetchedresultscontroller,Nsmanagedobject,我在表视图中使用“NSFetchedResultController”和“managedObjectContext”创建了核心数据。但在后面的视图控制器中,在收集加速度计数据并进行计算后,我将得到一些结果,我还希望将这些结果与我之前创建的核心数据存储在同一行索引中 我怎样才能做到这一点?如果我再次创建managedObjectContext,它将在此表中创建另一行核心数据 tableViewController中的代码: " 让managedObjectContext=UIApplication

我在表视图中使用“NSFetchedResultController”和“managedObjectContext”创建了核心数据。但在后面的视图控制器中,在收集加速度计数据并进行计算后,我将得到一些结果,我还希望将这些结果与我之前创建的核心数据存储在同一行索引中

我怎样才能做到这一点?如果我再次创建managedObjectContext,它将在此表中创建另一行核心数据

tableViewController中的代码:

" 让managedObjectContext=UIApplication.sharedApplication.delegate作为AppDelegate.managedObjectContext

var fetchedResultController: NSFetchedResultsController = NSFetchedResultsController()

override func viewDidLoad() {
    super.viewDidLoad()

    fetchedResultController = getFetchedResultController()
    fetchedResultController.delegate = self
    fetchedResultController.performFetch(nil)

}

func getFetchedResultController() -> NSFetchedResultsController {
    fetchedResultController = NSFetchedResultsController(fetchRequest: trialFetchRequest(), managedObjectContext: managedObjectContext!, sectionNameKeyPath: nil, cacheName: nil)
    return fetchedResultController
}

func trialFetchRequest() -> NSFetchRequest {
    let fetchRequest = NSFetchRequest(entityName: "Trials")
    fetchRequest.sortDescriptors = [NSSortDescriptor(key: "date", ascending: true)]
    return fetchRequest
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
}

   override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
    let numberOfSections = fetchedResultController.sections?.count
    return numberOfSections!
}

   override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {

let numberOfRowsInSection = fetchedResultController.sections?[section].numberOfObjects
return numberOfRowsInSection!  
}

    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    var cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as UITableViewCell

    let trial = fetchedResultController.objectAtIndexPath(indexPath) as Trials
    cell.textLabel?.text = trial.trialName
    cell.detailTextLabel?.text = trial.date?.description

    return cell
}

 override func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) {

        let managedObject:NSManagedObject = fetchedResultController.objectAtIndexPath(indexPath) as NSManagedObject

         managedObjectContext?.deleteObject(managedObject)
         managedObjectContext?.save(nil)
    }

func controllerDidChangeContent(controller: NSFetchedResultsController!) {
        tableView.reloadData()
}


override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!) {
    if segue.identifier == "showTrial" {
        let indexPath = tableView.indexPathForSelectedRow()
        let trial:Trials = fetchedResultController.objectAtIndexPath(indexPath!) as Trials

        let trialController:TrialDetailViewController = segue.destinationViewController as TrialDetailViewController

            trialController.trial = trial
      }

    }
  override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!) {
    if segue.identifier == "createTrial"  {
        if theTrialName.text != "" {
            createTrial()
        } else {

            let alertView = UIAlertController(title: "", message: "Trial name couldn't be empty", preferredStyle: .Alert)
            alertView.addAction(UIAlertAction(title: "OK", style: .Cancel, handler: nil))
            presentViewController(alertView, animated: true, completion: nil)

        }
    }
}

func createTrial() {
    let entityDescripition = NSEntityDescription.entityForName("Trials", inManagedObjectContext: managedObjectContext!)
    let trial = Trials(entity: entityDescripition!, insertIntoManagedObjectContext: managedObjectContext)
    trial.trialName = theTrialName.text
    trial.location = theLocation.text
    trial.notes = theNotes.text

    if theArm.on {
        trial.arm = 1
    } else {
        trial.arm = 0
    }
    managedObjectContext?.save(nil)
}
"

createTrial控制器中的代码:

'让managedObjectContext=UIApplication.sharedApplication.delegate作为AppDelegate.managedObjectContext

var fetchedResultController: NSFetchedResultsController = NSFetchedResultsController()

override func viewDidLoad() {
    super.viewDidLoad()

    fetchedResultController = getFetchedResultController()
    fetchedResultController.delegate = self
    fetchedResultController.performFetch(nil)

}

func getFetchedResultController() -> NSFetchedResultsController {
    fetchedResultController = NSFetchedResultsController(fetchRequest: trialFetchRequest(), managedObjectContext: managedObjectContext!, sectionNameKeyPath: nil, cacheName: nil)
    return fetchedResultController
}

func trialFetchRequest() -> NSFetchRequest {
    let fetchRequest = NSFetchRequest(entityName: "Trials")
    fetchRequest.sortDescriptors = [NSSortDescriptor(key: "date", ascending: true)]
    return fetchRequest
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
}

   override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
    let numberOfSections = fetchedResultController.sections?.count
    return numberOfSections!
}

   override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {

let numberOfRowsInSection = fetchedResultController.sections?[section].numberOfObjects
return numberOfRowsInSection!  
}

    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    var cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as UITableViewCell

    let trial = fetchedResultController.objectAtIndexPath(indexPath) as Trials
    cell.textLabel?.text = trial.trialName
    cell.detailTextLabel?.text = trial.date?.description

    return cell
}

 override func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) {

        let managedObject:NSManagedObject = fetchedResultController.objectAtIndexPath(indexPath) as NSManagedObject

         managedObjectContext?.deleteObject(managedObject)
         managedObjectContext?.save(nil)
    }

func controllerDidChangeContent(controller: NSFetchedResultsController!) {
        tableView.reloadData()
}


override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!) {
    if segue.identifier == "showTrial" {
        let indexPath = tableView.indexPathForSelectedRow()
        let trial:Trials = fetchedResultController.objectAtIndexPath(indexPath!) as Trials

        let trialController:TrialDetailViewController = segue.destinationViewController as TrialDetailViewController

            trialController.trial = trial
      }

    }
  override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!) {
    if segue.identifier == "createTrial"  {
        if theTrialName.text != "" {
            createTrial()
        } else {

            let alertView = UIAlertController(title: "", message: "Trial name couldn't be empty", preferredStyle: .Alert)
            alertView.addAction(UIAlertAction(title: "OK", style: .Cancel, handler: nil))
            presentViewController(alertView, animated: true, completion: nil)

        }
    }
}

func createTrial() {
    let entityDescripition = NSEntityDescription.entityForName("Trials", inManagedObjectContext: managedObjectContext!)
    let trial = Trials(entity: entityDescripition!, insertIntoManagedObjectContext: managedObjectContext)
    trial.trialName = theTrialName.text
    trial.location = theLocation.text
    trial.notes = theNotes.text

    if theArm.on {
        trial.arm = 1
    } else {
        trial.arm = 0
    }
    managedObjectContext?.save(nil)
}
"


另外,我想从中获取数据的视图控制器不是下面这个序列,而是大约3个视图。我创建了一个字符串来存储该视图中所需的数据。

我通过在TableViewController中创建对象并使用segue两次将其传输到SecondViewController和thirdViewController来解决问题。因此,它将在整个时间内处于相同的指数。我可以在以下两个视图控制器上更改核心数据的内容。

传递您已有的上下文?您好,这是一个普通的表视图核心数据。我已经更新了代码。之后我得到的数据,我想把它放在表格单元格中核心数据的同一行中,我可以通过单击单元格在detailViewController中显示它。我应该如何获得写入同一行核心数据的权限?感谢此答案提供的另一帮助