2015-02-10 125 views
1

現在我遇到了這個問題,我不知道如何從用戶選擇它並將其傳遞到另一個視圖控制器後從UITableView中獲取對象ID,我想根據已經從中獲取的對象ID刪除該對象前一個。所有數據來自user實體。CoreData - 如何從UITableView抓取對象ID並根據對象ID刪除對象?

的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) 

    } 

DeleteViewController

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

請指點。謝謝。

回答

0

我已經找到了答案。

的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) 

    } 

DeleteViewController

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) 
        } 
0

我通常這樣做有兩個功能,一個取得特定用戶和一個刪除用戶。現在,這些方法假設每個對象有一個唯一的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) 
    } 
}