【问题标题】:How to edit nsfetchresults records when only some records are displayed?仅显示部分记录时如何编辑 nsfetchresults 记录?
【发布时间】:2013-03-23 05:20:09
【问题描述】:

我正在尝试从另一个视图控制器编辑 nsfetchresults 记录,如果显示我的所有数据库条目,它工作正常。但是当我按日期过滤表格并尝试编辑它时,我收到了这个错误

2013-03-22 23:09:02.895 easyDB[1079:907] * 断言失败 -[UITableView _endCellAnimationsWithContext:],/SourceCache/UIKit/UIKit-2380.17/UITableView.m:1070 2013-03-22 23:09:18.865 easyDB[1079:907] 捕获异常!

NSInternalInconsistencyException

无效更新:第 0 节中的行数无效。 更新 (6) 后包含在现有节中的行必须是 等于该节之前包含的行数 update (2),加或减插入或删除的行数 该部分(0 插入,0 删除)和加或减的数量 移入或移出该部分的行(0 移入,0 移出)。

我送的

    NSIndexPath *indexpath = (NSIndexPath*)sender;
            GlucoseDetailViewController *glucoseDetailsVC = (GlucoseDetailViewController*)segue.destinationViewController;
            GlucoseRecords *rec = [self.fetchedResultsController objectAtIndexPath:indexpath];
[glucoseDetailsVC setSentRecord:rec];

在编辑视图中

    [self.sentRecord setGlucose:[NSNumber numberWithInt:[[txtGlucoseReading text] intValue]]];

    [self.sentRecord setDate:self.dateToAdd];
    [self.sentRecord setMealType:[NSString stringWithString:self.strMealOption]];
    [self.sentRecord setQuickNote:[NSString stringWithString:self.strQuickNote]];
    [self.sentRecord setDeleted:[NSNumber numberWithBool:NO]];
    [self.sentRecord setWhoRecorded:[self.settings currentUser]];

    NSError *error;
    if (![[self.settings managedObjectContext] save:&error])
        NSLog(@"Failed to add default user with error: %@", [error domain]);

FetchedResults 控制器

- (NSFetchedResultsController *)fetchedResultsController {

    if (_fetchedResultsController != nil && [self.strCurrentEntetyName isEqualToString:self.strEntetyName] &&(self.filteChanged==[NSNumber numberWithBool:NO])) {
        return _fetchedResultsController;
    }


    self.filteChanged = [NSNumber numberWithBool:NO];
    self.strCurrentEntetyName = [NSString stringWithString:self.strEntetyName];

    NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:[self strEntetyName]];
    //NSEntityDescription *entity = [NSEntityDescription
    //                               entityForName:@"Records" inManagedObjectContext:[self.settings managedObjectContext]];

    if (self.isDateFilterSet==[NSNumber numberWithBool:NO])
    {

    fetchRequest.predicate = [NSPredicate predicateWithFormat:@" whoRecorded.username = %@ AND deleted=0", [self.settings.currentUser username]];
    }
    else
    {
        fetchRequest.predicate = [NSPredicate predicateWithFormat:@" (whoRecorded.username = %@) AND (deleted = 0) AND (date =>%@) AND (date<=%@)", [self.settings.currentUser username],self.dateMinSetFilter ,self.dateMaxSetFilter];


    }

    NSLog(@"User:%@",[self.settings.currentUser username]);

   // [fetchRequest setEntity:entity];

    NSSortDescriptor *sort = [[NSSortDescriptor alloc]
                              initWithKey:@"date" ascending:NO];
    [fetchRequest setSortDescriptors:[NSArray arrayWithObject:sort]];

    [fetchRequest setFetchBatchSize:100];

    NSFetchedResultsController *theFetchedResultsController =
    [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest
                                        managedObjectContext:[self.settings managedObjectContext] sectionNameKeyPath:nil
                                                   cacheName:nil];
    self.fetchedResultsController = theFetchedResultsController;




    _fetchedResultsController.delegate = self;




    return _fetchedResultsController;

}

我了解问题所在,但我看不到任何解决问题的好方法。我可以在编辑之前重置表格以显示所有条目,但我认为这不是一个好的解决方案。有没有更好的方法来解决这个问题?

谢谢

【问题讨论】:

  • 请发布您的 fetchedResultsController 代码。

标签: ios edit nsfetchrequest uitableview


【解决方案1】:

你是如何“只显示一些记录”的?使用 NSPredicate 过滤结果或其他什么?

我认为您需要定位问题,是因为您从另一个视图控制器操作一个 tableview 吗?

【讨论】:

  • 是的,我按日期过滤它。抱歉不清楚。我已将该代码添加到问题中
【解决方案2】:

试试这个代码:

调用解析方法前请写:self.fetchedResultsController = nil;

- (NSFetchedResultsController *)fetchedResultsController // attaches an NSFetchRequest to this UITableViewController
{
    if (_fetchedResultsController != nil )
    {
        return _fetchedResultsController;
    }

    NSLog(@"Length:: %d",[[_fetchedResultsController mutableCopy] length]);

    NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:@"YourEntityName"];
    [fetchRequest setIncludesSubentities:YES];

    // Sort by Application name
    NSSortDescriptor* sortDescriptor1 = [[NSSortDescriptor alloc] initWithKey:@"date" ascending:YES selector:@selector(localizedCaseInsensitiveCompare:)];
    //Sort by CommandNameloca
    NSArray* sortDescriptors = [[NSArray alloc] initWithObjects: sortDescriptor1, nil];
    [fetchRequest setSortDescriptors:sortDescriptors];

    [fetchRequest setFetchBatchSize:100];

    tempArr=[[NSMutableArray alloc]initWithArray:sortDescriptors];

    NSLog(@"****----- tempArr Count == %d",[tempArr count]);

    NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:self.managedObjectContext sectionNameKeyPath:@"date" cacheName:@"Master"];
    aFetchedResultsController.delegate = self;
    self.fetchedResultsController = aFetchedResultsController;

    NSError *error = nil;

    if (![self.fetchedResultsController performFetch:&error])
    {
        // Replace this implementation with code to handle the error appropriately.
        // abort() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development.
        NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
        abort();
    }
    return _fetchedResultsController;
}

请在日志中查看数组计数。它将显示您获得的总记录。 请分享你的结果。祝你好运.. !!

【讨论】:

  • -[NSFetchedResultsController mutableCopyWithZone:]:发送到实例的无法识别的选择器。我得到这个错误。从我修改了你的代码。看起来我在表中得到了正确数量的条目。
【解决方案3】:

找到答案了!

[self.tableView updateConstraintsIfNeeded];

需要将此行添加到

- (void)controllerDidChangeContent:(NSFetchedResultsController *)controller

【讨论】:

    猜你喜欢
    • 2019-05-23
    • 2022-12-03
    • 2021-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-12
    • 2021-04-01
    相关资源
    最近更新 更多