Iphone 将对象从一个核心数据UITableView移动到另一个?

Iphone 将对象从一个核心数据UITableView移动到另一个?,iphone,core-data,iphone-sdk-3.0,Iphone,Core Data,Iphone Sdk 3.0,我正在尝试将对象从fetchedresultscontroller移动到另一个。代码如下所示: UISegmentedControl *segmentedControl = self.navigationItem.titleView; NSManagedObject *managedObject = [fetchedResultsController objectAtIndexPath:indexPath]; NSDate *timeValue = [[managedObject valueFo

我正在尝试将对象从fetchedresultscontroller移动到另一个。代码如下所示:

UISegmentedControl *segmentedControl = self.navigationItem.titleView;
NSManagedObject *managedObject = [fetchedResultsController objectAtIndexPath:indexPath];
NSDate *timeValue = [[managedObject valueForKey:@"timeStamp"] copy];

NSManagedObjectContext *context = [fetchedResultsController managedObjectContext];
[context deleteObject:[fetchedResultsController objectAtIndexPath:indexPath]];

NSError *error = nil;
if (![context save:&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. If it is not possible to recover from the error, display an alert panel that instructs the user to quit the application by pressing the Home button.
     */
    NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
    abort();
}
[self.tableView reloadData];

fetchedResultsController = [fetchedResultsControllers objectAtIndex:(1-segmentedControl.selectedSegmentIndex)];
context = [fetchedResultsController managedObjectContext];
NSManagedObject *newManagedObject = [NSEntityDescription insertNewObjectForEntityForName:@"Picked" inManagedObjectContext:context];

[newManagedObject setValue:timeValue forKey:@"timeStamp"];

error = nil;
if (![context save:&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. If it is not possible to recover from the error, display an alert panel that instructs the user to quit the application by pressing the Home button.
     */
    NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
    abort();
}

fetchedResultsController = [fetchedResultsControllers objectAtIndex:(1-segmentedControl.selectedSegmentIndex)];
}

但它不起作用。我感到恐惧:

Serious application error.  Exception was caught during Core Data change processing: Invalid update: invalid number of rows in section 0.  The number of rows contained in an existing section after the update (1) must be equal to the number of rows contained in that section before the update (2), plus or minus the number of rows inserted or deleted from that section (1 inserted, 0 deleted). with userInfo (null)

我真的不知道如何让它工作。核心数据很难处理。

昨晚我自己也遇到了这个问题。在我的例子中,我忘记了实现
NSFetchedResultsControllerDelegate
方法:

- (void)controller:(NSFetchedResultsController *)controller didChangeObject:(id)anObject atIndexPath:(NSIndexPath *)indexPath forChangeType:(NSFetchedResultsChangeType)type newIndexPath:(NSIndexPath *)newIndexPath;
- (void)controller:(NSFetchedResultsController *)controller didChangeSection:(id <NSFetchedResultsSectionInfo>)sectionInfo atIndex:(NSUInteger)sectionIndex forChangeType:(NSFetchedResultsChangeType)type;
- (void)controllerWillChangeContent:(NSFetchedResultsController *)controller;
- (void)controllerDidChangeContent:(NSFetchedResultsController *)controller;
-(void)控制器:(NSFetchedResultsController*)控制器didChangeObject:(id)索引路径中的一个对象:(NSIndexPath*)变更类型的indexPath:(NSFetchedResultsChangeType)类型newIndexPath:(NSIndexPath*)newIndexPath;
-(void)控制器:(NSFetchedResultsController*)控制器didChangeSection:(id)sectionInfo atIndex:(nsInteger)ChangeType的sectionIndex:(NSFetchedResultsChangeType)类型;
-(void)controllerWillChangeContent:(NSFetchedResultsController*)控制器;
-(void)controllerdChangeContent:(NSFetchedResultsController*)控制器;
问题是这样的:
NSManagedObjectContext
中删除一个对象,然后保存该上下文后,
UITableView
与更改不同步,并请求不存在的项

示例代码显示了如何结合在
NSFetchedResultsController
中添加/删除托管对象来实现这些功能