【问题标题】:How to grab object id from UITableView and delete object based on object id?如何从 UITableView 中获取对象 id 并根据对象 id 删除对象?
【发布时间】:2015-02-10 02:23:08
【问题描述】:

现在我遇到了这个问题,我不知道在用户从中选择后如何从 UITableView 中获取对象 id 并将其传递给另一个视图控制器,我想根据我已经获取的对象 id 删除对象从上一个。所有数据均来自user 实体。

UITableView

var myList: Array <AnyObject> = []

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {

        let appDel: AppDelegate = (UIApplication.sharedApplication().delegate as AppDelegate)
        let context: NSManagedObjectContext = appDel.managedObjectContext!

        /* grab object id here from core data object and pass to NSUserDefault*/
        NSUserDefaults.standardUserDefaults().setObject(objectId, forKey: "userId")

        let storyBoard : UIStoryboard = UIStoryboard(name: "Main", bundle:nil)

        let deleteViewController = storyBoard.instantiateViewControllerWithIdentifier("accessView") as DeleteViewController
        self.presentViewController(deleteViewController, animated:true, completion:nil)

    }

删除视图控制器

 let objectId = NSUserDefaults.standardUserDefaults().stringForKey("userId")
/* Grab object id from NSUserDefault and delete object here*/

【问题讨论】:

    标签: ios uitableview swift core-data


    【解决方案1】:

    我已经找到答案了。

    UITableView

    var myList: Array <AnyObject> = []
    
    func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
    
            let data: NSManagedObject = myList[indexPath.row] as NSManagedObject
    
            let userId = data.valueForKeyPath("userId") as? String
            NSUserDefaults.standardUserDefaults().setObject(objectId, forKey: "userId")
    
            let storyBoard : UIStoryboard = UIStoryboard(name: "Main", bundle:nil)
    
            let deleteViewController = storyBoard.instantiateViewControllerWithIdentifier("accessView") as DeleteViewController
            self.presentViewController(deleteViewController, animated:true, completion:nil)
    
        }
    

    删除视图控制器

    let userId = NSUserDefaults.standardUserDefaults().stringForKey("userId")
    
                        //reference to our app delegate
                        let appDel: AppDelegate = (UIApplication.sharedApplication().delegate as AppDelegate)
                        let context: NSManagedObjectContext = appDel.managedObjectContext!
    
                        let request = NSFetchRequest(entityName: "EntityOne")
                        request.includesSubentities = false
                        request.returnsObjectsAsFaults = false
                        request.predicate = NSPredicate(format: "userId = %@", userId!)
                        let items = context.executeFetchRequest(request, error: nil)!
    
                        for item in items {
                            context.deleteObject(item as NSManagedObject)
                        }
    

    【讨论】:

      【解决方案2】:

      我通常使用两个函数来执行此操作,一个是获取特定用户,一个是删除用户。现在这些方法假设每个对象都有一个唯一的 id,所以使用下面的函数你只需调用deleteUser(fetchUser(someID))

      func fetchUser(id: Int) -> User? {
      
          // Define fetch request/predicate
          var fetchRequest = NSFetchRequest(entityName: "User")
          let predicate = NSPredicate(format: "id == \(id)")
      
          // Assign fetch request properties
          fetchRequest.predicate = predicate
          fetchRequest.fetchBatchSize = 1
          fetchRequest.fetchLimit = 1
      
          // Handle results
          let fetchedResults = managedObjectContext?.executeFetchRequest(fetchRequest, error: nil)
      
          if fetchedResults?.count != 0 {
      
              if let fetchedUser: User = fetchedResults![0] as? User {
                  return fetchedUser
              }
          }
          return nil
      }
      
      // Delete
      func deleteUser(id: Int) {
          if let user = fetchEvent(id) {
              managedObjectContext?.deleteObject(user)
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-02-20
        • 2015-11-14
        • 1970-01-01
        • 1970-01-01
        • 2013-05-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多