我有一个具有许多属性的核心数据实体,包括数量(浮点数)、类别总计(浮点数)和类别(字符串)
初始 ViewController 使用 FethchedResultsController 来检索实体,并根据类别对它们进行排序,然后是 categoryTotal。到目前为止没有问题。
NSManagedObjectContext *moc = [self managedObjectContext];
NSEntityDescription *entityDescription = [NSEntityDescription entityForName:@"Transaction" inManagedObjectContext:moc];
NSFetchRequest *request = [[[NSFetchRequest alloc] init] autorelease];
[request setEntity:entityDescription];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(dateStamp >= %@) AND (dateStamp =< %@)", startDate, endDate];
[request setPredicate:predicate];
NSSortDescriptor *sortByCategory = [[NSSortDescriptor alloc] initWithKey:@"category" ascending:sortOrder];
NSSortDescriptor *sortByTotals = [[NSSortDescriptor alloc] initWithKey:@"categoryTotal" ascending:sortOrder];
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortByTotals, sortByCategory, nil];
[request setSortDescriptors:sortDescriptors];
NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:request managedObjectContext:managedObjectContext sectionNameKeyPath:@"category" cacheName:nil];
aFetchedResultsController.delegate = self;
self.fetchedResultsController = aFetchedResultsController;
在选择一行时(tableView:didSelectRowAtIndexPath),另一个视图控制器被加载,允许编辑所选实体的金额字段。
在返回第一个视图之前,categoryTotal 被新的“金额”更新。当返回到第一个视图控制器时,问题就来了,应用程序炸弹
严重的应用程序错误。在核心数据更改处理期间捕获到异常:无效更新:第 0 节中的行数无效。更新后现有节中包含的行数 (1) 必须等于更新前该节中包含的行数(1),加上或减去从该部分插入或删除的行数(0 插入,1 删除)。with userInfo (null) 程序接收信号:“EXC_BAD_ACCESS”。
这似乎是由 NSSortDescriptor *sortByTotals = [[NSSortDescriptor alloc] initWithKey:@"categoryTotal" ascending:sortOrder]; 如果我删除它,一切都会按预期工作,但显然没有我想要的排序。
我猜这与由于 categoryTotal 更改(删除/插入)而导致的排序顺序更改有关,但无法解决此问题。我已经验证了在第二个视图中正确地修改了值,因此它似乎是 fetchedResultsController 被混淆了。如果 categoryAmount 更改为不改变排序顺序的,则不会产生错误
我没有在物理上更改(即删除)fetchedResultsController 返回的项目数......我能找到的唯一其他问题似乎会产生此错误
任何想法都将受到欢迎
谢谢, AJ