Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 获取的结果控制器在controllerDidChangeContent之后复制结果_Ios_Swift_Core Data_Nsfetchedresultscontroller - Fatal编程技术网

Ios 获取的结果控制器在controllerDidChangeContent之后复制结果

Ios 获取的结果控制器在controllerDidChangeContent之后复制结果,ios,swift,core-data,nsfetchedresultscontroller,Ios,Swift,Core Data,Nsfetchedresultscontroller,我有两张桌子:一张是所有员工的名单,另一张是能够提供某种服务(即按摩)的员工名单 数据模型如下所示: 每项服务都可以有许多员工提供,每个员工都可以提供许多服务(多对多关系)。 问题是,每次我将员工从员工列表拖放到提供此服务的员工时,当我从最后一个索引开始时,会得到重复的结果,而当我从第一个索引开始时,一切正常 当我再次加载viewController时(即使没有再次启动应用程序),所有数据都会正确显示。 此处代码: 在EmployeesAvailableTableViewController

我有两张桌子:一张是所有员工的名单,另一张是能够提供某种服务(即按摩)的员工名单

数据模型如下所示:

每项服务都可以有许多员工提供,每个员工都可以提供许多服务(多对多关系)。 问题是,每次我将员工从
员工列表
拖放到提供此服务的
员工
时,当我从最后一个索引开始时,会得到重复的结果,而当我从第一个索引开始时,一切正常

当我再次加载viewController时(即使没有再次启动应用程序),所有数据都会正确显示。 此处代码:
EmployeesAvailableTableViewController.swift中
I初始化
NSFetchedResultsController

func initializeFetchedResultsController() {
     let appDelegate = UIApplication.shared.delegate as! AppDelegate
     let context = appDelegate.managedObjectContext
     let request: NSFetchRequest<Employee>
     request = NSFetchRequest(entityName: "Employee")
     //this predicate show only those employee who don't have the entity `service` yet.
     request.predicate = NSPredicate(format: "SUBQUERY(service, $c, $c.service_id == %@).@count == 0", (service?.service_id!)!)

     let lastNameSort = NSSortDescriptor(key: "lastName", ascending: true)
            request.sortDescriptors = [lastNameSort]

     fetchedResultsController = NSFetchedResultsController(fetchRequest: request, managedObjectContext: context, sectionNameKeyPath: nil, cacheName: nil)

     fetchedResultsController?.delegate = self

      do {
           //I added this as suggested in another question on stackoverflow but nothing has changed
           if (self.fetchedResultsController?.fetchedObjects == nil){

                try fetchedResultsController?.performFetch()

            }
        } catch {
            fatalError("Failed to initialize FetchedResultsController: \(error)")
        }
}
func initializeFetchedResultsController() {
        let appDelegate = UIApplication.shared.delegate as! AppDelegate
        let context = appDelegate.managedObjectContext
        context.stalenessInterval = 0
        let request: NSFetchRequest<Employee>

        request = NSFetchRequest(entityName: "Employee")
        request.predicate = NSPredicate(format: "ANY service.service_id == %@", (service?.service_id)!)

        let lastNameSort = NSSortDescriptor(key: "lastName", ascending: true)
        request.sortDescriptors = [lastNameSort]


        fetchedResultsController = NSFetchedResultsController(fetchRequest: request, managedObjectContext: context, sectionNameKeyPath: nil, cacheName: nil)
        fetchedResultsController?.delegate = self

        do {

            if (self.fetchedResultsController?.fetchedObjects == nil)
            {

                try fetchedResultsController?.performFetch()

            }
        } catch {
            fatalError("Failed to initialize FetchedResultsController: \(error)")
        }

}
   //both this delegates methods get called 

func controllerWillChangeContent(_ controller: NSFetchedResultsController<NSFetchRequestResult>) {
self.assignedEmployeeTableView.reloadData()
}

func controllerDidChangeContent(_ controller: NSFetchedResultsController<NSFetchRequestResult>) {
self.assignedEmployeeTableView.reloadData()
}
最后,在
PriceListViewController

func initializeFetchedResultsController() {
     let appDelegate = UIApplication.shared.delegate as! AppDelegate
     let context = appDelegate.managedObjectContext
     let request: NSFetchRequest<Employee>
     request = NSFetchRequest(entityName: "Employee")
     //this predicate show only those employee who don't have the entity `service` yet.
     request.predicate = NSPredicate(format: "SUBQUERY(service, $c, $c.service_id == %@).@count == 0", (service?.service_id!)!)

     let lastNameSort = NSSortDescriptor(key: "lastName", ascending: true)
            request.sortDescriptors = [lastNameSort]

     fetchedResultsController = NSFetchedResultsController(fetchRequest: request, managedObjectContext: context, sectionNameKeyPath: nil, cacheName: nil)

     fetchedResultsController?.delegate = self

      do {
           //I added this as suggested in another question on stackoverflow but nothing has changed
           if (self.fetchedResultsController?.fetchedObjects == nil){

                try fetchedResultsController?.performFetch()

            }
        } catch {
            fatalError("Failed to initialize FetchedResultsController: \(error)")
        }
}
func initializeFetchedResultsController() {
        let appDelegate = UIApplication.shared.delegate as! AppDelegate
        let context = appDelegate.managedObjectContext
        context.stalenessInterval = 0
        let request: NSFetchRequest<Employee>

        request = NSFetchRequest(entityName: "Employee")
        request.predicate = NSPredicate(format: "ANY service.service_id == %@", (service?.service_id)!)

        let lastNameSort = NSSortDescriptor(key: "lastName", ascending: true)
        request.sortDescriptors = [lastNameSort]


        fetchedResultsController = NSFetchedResultsController(fetchRequest: request, managedObjectContext: context, sectionNameKeyPath: nil, cacheName: nil)
        fetchedResultsController?.delegate = self

        do {

            if (self.fetchedResultsController?.fetchedObjects == nil)
            {

                try fetchedResultsController?.performFetch()

            }
        } catch {
            fatalError("Failed to initialize FetchedResultsController: \(error)")
        }

}
   //both this delegates methods get called 

func controllerWillChangeContent(_ controller: NSFetchedResultsController<NSFetchRequestResult>) {
self.assignedEmployeeTableView.reloadData()
}

func controllerDidChangeContent(_ controller: NSFetchedResultsController<NSFetchRequestResult>) {
self.assignedEmployeeTableView.reloadData()
}
func initializeFetchedResultsController(){
让appDelegate=UIApplication.shared.delegate为!appDelegate
让上下文=appDelegate.managedObjectContext
context.stalenessInterval=0
let请求:NSFetchRequest
request=NSFetchRequest(entityName:“雇员”)
request.predicate=NSPredicate(格式:“ANY service.service\u id==%@”,(service?.service\u id)!)
让lastNameSort=NSSortDescriptor(键:“lastName”,升序:true)
request.sortDescriptors=[lastNameSort]
fetchedResultsController=NSFetchedResultsController(fetchRequest:request,managedObjectContext:context,sectionNameKeyPath:nil,cacheName:nil)
fetchedResultsController?.delegate=self
做{
if(self.fetchedResultsController?.fetchedObject==nil)
{
请尝试获取ResultsController?.performFetch()
}
}抓住{
fatalError(“未能初始化FetchedResultsController:\(错误)”)
}
}
//这两个委托方法都会被调用
func controllerWillChangeContent(\ucontroller:NSFetchedResultsController){
self.assignedEmployeeTableView.reloadData()
}
func controllerDidChangeContent(\控制器:NSFetchedResultsController){
self.assignedEmployeeTableView.reloadData()
}