无法获取Core Data以删除表视图行

时间:2011-09-21 14:52:39

标签: ios core-data

我收到以下错误:

Unresolved error (null), (null)

任何与此相关的想法 - 我试图允许用户使用滑动选项从Core Data中删除项目...添加&显示数据有效 - 但删除显示错误...

@implementation List

@synthesize eventsArray;
@synthesize managedObjectContext, fetchedResultsController, List;

...

- (void)viewDidLoad
{
    [super viewDidLoad];

    if (managedObjectContext == nil) 
    { 
        managedObjectContext = [(ApplicationAppDelegate *)[[UIApplication sharedApplication] delegate] managedObjectContext]; 
    }


    UIBarButtonItem *editButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemEdit target:self action:@selector(editAction)];
    self.navigationItem.leftBarButtonItem = editButton;

    [editButton release];

    UIBarButtonItem *addButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target: self action:@selector(addAction)];
    self.navigationItem.rightBarButtonItem = addButton;

    [addButton release];
}

- (void)viewDidUnload
{
    [super viewDidUnload];
    self.fetchedResultsController.delegate = nil;
}

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];

    List = [[NSMutableArray alloc] init];

    NSError *error;
    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
    NSEntityDescription *entity = [NSEntityDescription entityForName:@"Items" inManagedObjectContext:managedObjectContext];
    [fetchRequest setEntity:entity];
    NSArray *fetchedObjects = [managedObjectContext executeFetchRequest:fetchRequest error:&error];

    for (NSManagedObject *info in fetchedObjects)
    {
        [List insertObject:[info valueForKey:@"Name"] atIndex:0];
    }
    [fetchRequest release];
    [self.tableView reloadData];
}

...

#pragma mark - Table view data source

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    // Return the number of sections.
    return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    // Return the number of rows in the section.
    return [List count];
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
    }

    // Get and display the values for the keys; the key is the attribute name from the entity 
    cell.textLabel.text = [List objectAtIndex:indexPath.row];

    // Add a standard disclosure for drill-down navigation
    cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;

    return cell;
}


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

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

        // Save the context.
        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();
        }    }
}


- (void)dealloc
{
    [fetchedResultsController release];
    [List release];
    [super dealloc];
}

@end

1 个答案:

答案 0 :(得分:0)

首先,您将视图控制器实现的名称视为“列表”,但似乎也有一个名为List的ivar。检查视图控制器类的名称,因为它应该是@implementation声明后的名称。

此外,如果您的NSArray的名称是List,那么通常的编码约定是保持ivars从小写开始。保留大写的名字和小写的ivars应该有助于避免将来混淆。