Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 从tableView和coredata中删除行_Iphone_Ios_Objective C_Uitableview - Fatal编程技术网

Iphone 从tableView和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

我正在从coredata检索数据并在tableview中显示它。如果用户单击一行,它将导航到另一个视图(如视图2)

现在,我想从tableview和coredata中删除一行。我使用了一个代码,我可以删除该行。但是,当我转到view 2并返回时,记录又回来了。(它将从coredata中删除,但行及其数据仍然存在,直到我重新加载视图为止)

这是我使用的代码

- (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中。它不删除我正在选择的行吗?耶..我有点搞不清楚问题到底出在哪里。如果其在核心数据中删除或在适当位置重新加载表视图