Iphone 从tableView和coredata中删除行
我正在从coredata检索数据并在tableview中显示它。如果用户单击一行,它将导航到另一个视图(如视图2) 现在,我想从tableview和coredata中删除一行。我使用了一个代码,我可以删除该行。但是,当我转到view 2并返回时,记录又回来了。(它将从coredata中删除,但行及其数据仍然存在,直到我重新加载视图为止) 这是我使用的代码Iphone 从tableView和coredata中删除行,iphone,ios,objective-c,uitableview,Iphone,Ios,Objective C,Uitableview,我正在从coredata检索数据并在tableview中显示它。如果用户单击一行,它将导航到另一个视图(如视图2) 现在,我想从tableview和coredata中删除一行。我使用了一个代码,我可以删除该行。但是,当我转到view 2并返回时,记录又回来了。(它将从coredata中删除,但行及其数据仍然存在,直到我重新加载视图为止) 这是我使用的代码 - (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableV
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
if (editingStyle == UITableViewCellEditingStyleDelete)
{
NSManagedObjectContext *context = [self.fetchedResultsController managedObjectContext];
[context deleteObject:[self.fetchedResultsController objectAtIndexPath:indexPath]];
NSError *error;
if (![context save:&error])
{
UIAlertView *alertView = [[UIAlertView alloc]initWithTitle:@"App" message:@"Sorry the Item Cannot be deleted" delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles:nil];
[alertView show];
[alertView release];
}
}
}
根据您的要求更改表和详细信息关系
- (void)tableView:(UITableView *)aTableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle
forRowAtIndexPath:(NSIndexPath *)indexPath {
if (editingStyle == UITableViewCellEditingStyleDelete) {
NSManagedObject *selectedOrder = [selectedOrderArray objectAtIndex:indexPath.row];
Order *orderInstance = (Order *) selectedOrder;
numberOfRows = [[orderInstance.detailRelation allObjects]count];
NSString *deletedItem;
deletedItem = (orderInstance.optionName == nil) ? [[NSString alloc]initWithFormat:@"%@ deleted successfully",orderInstance.menuName] : [[NSString alloc]initWithFormat:@"%@ %@ deleted successfully",orderInstance.optionName , orderInstance.menuName];
[self.managedObjectContext deleteObject:selectedOrder];
if([self performSaveInMemoryObjectContext:self.managedObjectContext]){
// [self.tableview reloadData];
[common ShowAlert:deletedItem andMessage:@""];
[selectedOrderArray removeObjectAtIndex:indexPath.row];
}
[self fetchRecords];
// NSLog(@"count... %d",[selectedOrderArray count]);
[tableview reloadData];
}
}
您是否尝试过在删除后重新加载数据
if (editingStyle == UITableViewCellEditingStyleDelete)
{
NSManagedObjectContext *context = [self.fetchedResultsController managedObjectContext];
[context deleteObject:[self.fetchedResultsController objectAtIndexPath:indexPath]];
NSError *error;
if (![context save:&error])
{
UIAlertView *alertView = [[UIAlertView alloc]initWithTitle:@"Xpense Tracker" message:@"Sorry the Item Cannot be deleted" delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles:nil];
[alertView show];
alertView release];
}
[YOURTABLEVIEW reloadData];
}
已编辑:现在工作正常。这样试试
Step 1:
@interface ViewController : UIViewController <UITableViewDataSource,UITableViewDelegate,NSFetchedResultsControllerDelegate>
Step 2:
update your
-(NSFetchedResultsController *)fetchedResultsController{
self.fetchedResultsController.delegate = self; // with this
}
step 3:
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
id <NSFetchedResultsSectionInfo> sectionInfo = [[self.fetchedResultsController sections] objectAtIndex:section];
return [sectionInfo numberOfObjects];
}
- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath
{
return YES;
}
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
if (editingStyle == UITableViewCellEditingStyleDelete)
{
NSManagedObjectContext * context = [self.fetchedResultsController managedObjectContext];
[context deleteObject:[self.fetchedResultsController objectAtIndexPath:indexPath]];
NSError * error;
if (![context save:&error])
{
NSLog(@"Deletion Error");
}
}
}
Step 4:
include NSFetchedResultsControllerDelegate method
- (void)controllerDidChangeContent:(NSFetchedResultsController *)controller {
[YOURTABLEVIEW reloadData];
}
步骤1:
@界面ViewController:UIViewController
步骤2:
更新您的
-(NSFetchedResultsController*)fetchedResultsController{
self.fetchedResultsController.delegate=self;//使用此
}
步骤3:
-(NSInteger)表视图:(UITableView*)表视图行数节:(NSInteger)节
{
id sectionInfo=[[self.fetchedResultsController节]objectAtIndex:section];
返回[sectionInfo numberOfObjects];
}
-(BOOL)tableView:(UITableView*)tableView caneditrowatinexpath:(nsindepath*)indepath
{
返回YES;
}
-(void)tableView:(UITableView*)tableView提交的编辑样式:(UITableViewCellEditingStyle)行的编辑样式索引路径:(NSIndexPath*)索引路径
{
如果(editingStyle==UITableViewCellEditingStyleDelete)
{
NSManagedObjectContext*上下文=[self.fetchedResultsController managedObjectContext];
[上下文删除对象:[self.fetchedResultsController对象索引路径:indexPath]];
n错误*错误;
如果(![上下文保存:&错误])
{
NSLog(@“删除错误”);
}
}
}
步骤4:
包括NSFetchedResultsControllerDelegate方法
-(void)controllerDidChangeContent:(NSFetchedResultsController*)控制器{
[YOURTABLEVIEW重新加载数据];
}
NSManagedObjectContext
删除后需要保存
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
if (editingStyle == UITableViewCellEditingStyleDelete) {
NSManagedObjectContext *context = [self.fetchedResultsController managedObjectContext];
[context deleteObject:[self.fetchedResultsController objectAtIndexPath:indexPath]];
NSError *error;
[context save:&error] //add this line
if (![context save:&error]) {
UIAlertView *alertView = [[UIAlertView alloc]initWithTitle:@"Xpense Tracker" message:@"Sorry the Item Cannot be deleted" delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles:nil];
[alertView show];
[alertView release];
}
}
}
检查此项。数据已删除,但行和附件类型可见。一旦删除,请再次提取并用新数据重新加载tableView。我这样做了,滑动以删除现在正在工作。但当我单击编辑按钮时,所有行都会显示一个小减号。如果我点击删除按钮,应用程序就会卡在那里。(不是崩溃).@Chandu您找到问题的解决方案了吗?当您仅重新加载视图时,它会显示完美的右侧。。?因此,成功地从核心数据中删除了该对象。您是如何将view2恢复到view1的..如果您使用的是从superview中删除,您需要放置自定义委托并重新加载表视图的位置如果我在视图1上,则删除操作正常,但如果我转到视图2并返回视图1,则删除操作不起作用。我没有使用“从超级视图中删除”。我只是使用基本导航控制器。在转到视图2时,您需要删除NSManaged对象。因此,当用户单击“按到”时下一个视图使用导航控制器na,将此删除代码添加到DIDSELECTROWATINDEXPATH中。它不删除我正在选择的行吗?耶..我有点搞不清楚问题到底出在哪里。如果其在核心数据中删除或在适当位置重新加载表视图