开发者

Cannot get Core Data to Delete Table View Row

I am getting the following error:

Unresolved error (null), (null)

Any ideas what this could be related to - I am trying to allow the users a swipe option to delete an item from Core Data... Adding & Displaying the data works - however deleting shows the error...

@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]开发者_StackOverflow社区;
        [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


Firstly, you have the name of your view controller implementation as 'List' but also seem to have an ivar named List. Check the name of the view controller class as this should be the name after the @implementation declarative.

Also, if the name of your NSArray is List then the usual coding convention is to keep ivars starting with lower case. Keeping class names with upper case and ivars with lower case should help avoid confusion in the future.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜