从核心数据中删除特定对象

时间:2013-12-11 01:29:25

标签: ios core-data delete-row

我有一个包含Core Data对象的UITableView。当您单击某一行时,您将被带到另一个视图控制器,并可选择删除该图像。如何根据我选择的行删除特定的对象核心数据。所以说我会选择一个图像然后单击显示的视图控制器中的删除按钮,它将删除我选择的图像。

EDIT在DetailedViewController中添加了删除代码

NSError *error = nil; 
[self.managedObjectContext deleteObject:self.managedObject]; 

// REMOVE THIS LINE NO NEED TO CALL SAVE TWICE
//[self.managedObjectContext save:&error]; 

if (![self.managedObjectContext save:&error]) { 
NSLog(@"Unresolved error %@, %@", error, [error userInfo]); 
abort(); 
} else { 
NSLog(@"Video and Photo Deleted"); 
}

1 个答案:

答案 0 :(得分:0)

如果您在UITableView中删除并假设您正在使用fetchedResultsController,通常会使用类似这样的内容。

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (tableView == self.tableView) {
        if (editingStyle == UITableViewCellEditingStyleDelete) {
           NSManagedObjectContext *context = [self.fetchedResultsController managedObjectContext];
           [context deleteObject:[self.fetchedResultsController objectAtIndexPath:indexPath]];

        }
    }
}

但是如果你在一些detailViewController中,那么假设你将managedObjectContext和managedObject传递给this detailedViewController(self),你就可以使用它了。再次假设您正在将fetchedResultsController与UITableView结合使用,以便在UITableView中正确反映删除。

   [self.managedObjectContext deleteObject:self.managedObject];

您可以通过创建属性并设置属性(如此

)将这些传递给detailedViewController
@interface DetailedViewController: UIViewController

@property (strong, nonatomic) NSManagedObject *detailItem;
@property (strong, nonatomic) NSManagedObjectContext *managedObjectContext;

@end

并在创建detailedViewController后设置属性,如下所示

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSManagedObject *object = [[self fetchedResultsController] objectAtIndexPath:indexPath];

    // Code to create detailed view and set properties
     DetailedViewController *detailedViewController = [DetailedViewController alloc] ...;
     detailedViewController.managedObjectContext = self.managedObjectContext;
     detailedViewController.managedObject = object;

     [self.navigationController pushViewController:detailViewController animated:YES];
}