0

我有一个简单的程序,它是一个调用 ModalViewController 的 TableViewController,用户将一些文本添加到文本字段中,单击保存并将其添加回 TableViewController。

我正在尝试滑动以删除行,当我这样做时,值更改为“NULL”并且该行仍然存在。如果我重新启动应用程序或转到另一个视图控制器并再次返回,则该行将消失。

我的代码如下所示:

@interface NewTimelineViewController () <UITableViewDataSource, UITableViewDelegate>
@property (strong) NSMutableArray *transactions;
@end

@implementation NewTimelineViewController

@synthesize transactions = _transactions;

- (NSManagedObjectContext *)managedObjectContext
{       
    NSManagedObjectContext *context = nil;
    id delegate = [[UIApplication sharedApplication]delegate];
    if ([delegate performSelector:@selector(managedObjectContext)])
    {
        context = [delegate managedObjectContext];
    }
    return context;
}

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return self.transactions.count;
}

- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath
{
    return YES;
}

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{

    if (editingStyle == UITableViewCellEditingStyleDelete)
    {
        [self.managedObjectContext deleteObject:[self.transactions objectAtIndex:indexPath.row]];

        NSError *error = nil;
        if (![self.managedObjectContext save:&error])
        {
            NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
            //abort();
            //[self.tableView reloadData];       
        }
    }
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Persons";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    NSManagedObject *transaction = [self.transactions objectAtIndex:indexPath.row];

    [cell.textLabel setText:[NSString stringWithFormat:@"%@ %@", [transaction valueForKeyPath:@"whoBy.name"], [transaction valueForKeyPath:@"gifting.amount"]]];

    return cell;
}

我知道这很容易。对我来说,看起来实际的行在这个视图中没有被删除或重新加载,但是当这个 TableView 再次出现时,它就消失了。

任何帮助,将不胜感激!

4

3 回答 3

0

您需要为 - (void)tableView:(UITableView *)tableView commitEditingStyle(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath;UITableView 的数据源方法提供一个实现。

在此方法中,您应该从 transactions 数组中删除值,然后调用 tableView 的 reloadData 或 deleteRowsAtIndexPaths 以获取用户选择删除的行的索引路径。

于 2013-10-12T12:14:13.597 回答
0

你刚刚从数据库中删除了对象,

[self.managedObjectContext deleteObject:[self.transactions objectAtIndex:indexPath.row]];

但是成功后忘记从数据源中删除了self.transactions

[self.transactions removeObjectAtIndex:indexPath.row];

并记得重新加载表格视图或删除已删除对象的表格视图单元格。

于 2013-10-12T12:14:36.793 回答
0

您还需要从数据源中删除对象(可能是数组),然后重新加载表视图(通过重新加载或更不显眼的方式,如 reloadRowsAtIndexPaths)

于 2013-10-12T12:03:25.733 回答