Не удается получить основные данные для удаления строки представления таблицы - PullRequest
0 голосов
/ 21 сентября 2011

Я получаю следующую ошибку:

Unresolved error (null), (null)

Любые идеи, с чем это может быть связано - я пытаюсь предоставить пользователям возможность выбора, чтобы удалить элемент из Базовых данных ... Добавление и отображение данных работает - однако удаление показывает ошибку ...

@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 голосов
/ 21 сентября 2011

Во-первых, у вас есть имя вашей реализации контроллера представления как «Список», но, похоже, у вас есть ивар с именем «Список».Проверьте имя класса контроллера представления, поскольку это должно быть имя после декларативного @implementation.

Кроме того, если имя вашего NSArray - List, то обычное соглашение о кодировании состоит в том, чтобы ивары начинались со строчных букв.Хранение имен классов в верхнем регистре и иваров в нижнем регистре должно помочь избежать путаницы в будущем.

...