ios - Delete a row from Core Data UITableView with custom button -
i have uitableview
populated cells core data , nsfetchedresultscontroller
. have custom button on custom cells, i'm planning on using delete cell. it's easy add standard swipe-to-delete, i'd rather use custom button. know how hook action button delete entry data model , delete cell uitableview
? cannot find solution life of me.
edit:
this code have delete using standard swipe-to-delete. way modify work button?
if (editingstyle == uitableviewcelleditingstyledelete) { [self.tableview beginupdates]; // delete task task *tasktodelete = [self.fetchedresultscontroller objectatindexpath:indexpath]; nslog(@"deleting (%@)", tasktodelete.name); [self.managedobjectcontext deleteobject:tasktodelete]; [self.managedobjectcontext save:nil]; // delete row [self.tableview deleterowsatindexpaths:[nsarray arraywithobject:indexpath] withrowanimation:uitableviewrowanimationfade]; [self performfetch]; [self.tableview endupdates]; }
general overview:
- connect button action on controller,
deleterow:(id)sender
; - the
sender
button. superview, superview of superview, , on until have reference uitableviewcell. (search in loop usingiskindofclass:
, don't assume button 1, 2, 3 levels down.) - call table view's
indexpathforcell:
method convert cell reference index path. - use
objectatindexpath:
on fetched results controller object.
then delete it! if handling nsfetchedresultscontroller delegate methods take care of removing deleted row.
sample code (typed without compiler check it):
- (void)deleterow:(id)sender { id view = [sender superview]; while (view && ![view iskindofclass:[uitableviewcell class]]) { view = [view superview]; } uitableviewcell *cell = view; nsindexpath *indexpath = [self.tableview indexpathforcell:cell]; nsmanagedobject *task = [fetchedresultscontroller objectatindexpath:indexpath]; [self.managedobjectcontext deleteobject:task]; [self.managedobjectcontext save:nil]; }
that's it. not try remove row table view. when object deleted, nsfetchedresultscontroller detect change , update table view, assuming set delegate methods described in documentation nsfetchedresultscontroller. if haven't, read documentation (just option-double-click on "nsfetchedresultscontroller" in xcode).
Comments
Post a Comment