2012-01-23 1 views
0

Использование основных данных для заполнения таблицы. Я не получаю то, что я могу удалить одну запись из основных данных.Удаление данных ядра с одной записью через стол iPhone

Вот код, я использую:

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 

if (tableView == favouritesTable) { 
    cellValue = [licensePlateArray objectAtIndex:indexPath.row]; 
} else { // handle search results table view 
    cellValue = [filteredListItems objectAtIndex:indexPath.row]; 
} 

static NSString *CellIdentifier = @"vlCell"; 

VehicleListCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 

if (cell == nil) { 

    NSLog(@"Cell Created"); 

    NSArray *nibObjects = [[NSBundle mainBundle] loadNibNamed:@"VehicleListCell" owner:nil options:nil]; 

    for (id currentObject in nibObjects) { 
     if ([currentObject isKindOfClass:[VehicleListCell class]]) { 
      cell = (VehicleListCell *)currentObject; 
     } 
    } 

    UILongPressGestureRecognizer *pressRecongnizer = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(tableCellPressed:)]; 
    pressRecongnizer.minimumPressDuration = 0.5f; 
    [cell addGestureRecognizer:pressRecongnizer]; 
    [pressRecongnizer release]; 
} 

cell.textLabel.font = [UIFont systemFontOfSize:10]; 

Favouritesdata *favdata = [licensePlateArray objectAtIndex:indexPath.row]; 

[[cell ignition] setImage:[UIImage imageNamed:@"ignition.png"]]; 
[[cell direction] setImage:[UIImage imageNamed:@"south.png"]]; 

cell.licPlate.text = [favdata licenseplate]; 

NSLog(@"cellvalue for cellforRow: %@", cell.licPlate.text); 

return cell;} 

В методе UILongPressGestureRecognizer:

- (void)tableCellPressed:(UILongPressGestureRecognizer *)recognizer{ 

if (recognizer.state != UIGestureRecognizerStateBegan) { 
    return; 
} 

UIAlertView *alert = [[UIAlertView alloc] initWithTitle:nil message:nil delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles: nil] ; 

[alert addButtonWithTitle:@"Remove from Favourites"]; 
[alert addButtonWithTitle:@"Take to Map"]; 

[alert show];} 

В встревоженной метод просмотра:

-(void)alertView:(UIAlertView *)alert clickedButtonAtIndex:(NSInteger)buttonIndex { 

NSString *title = [alert buttonTitleAtIndex:buttonIndex]; 

NSManagedObjectContext *contextFav = [app managedObjectContext]; 
Favouritesdata * favourites = [NSEntityDescription insertNewObjectForEntityForName:@"Favouritesdata" inManagedObjectContext:contextFav]; 

if([title isEqualToString:@"Remove from Favourites"]) 
{ 
    NSLog(@"cellValueForLongPress: %@", cellValueForLongPress); 


    if (cellValueForLongPress <= 0) { 

     NSLog(@"No data to delete"); 

    } 
    else { 

     favourites.licenseplate = cellValueForLongPress; 
    } 

    [alert dismissWithClickedButtonIndex:0 animated:YES]; 
} 
else if([title isEqualToString:@"Take to Map"]) 
{ 
    NSLog(@"Go to MapView"); 
} 

NSError *error; 

if (![context save:&error]) { 
    NSLog(@"Error Occured"); 
}} 

ответ

1

Если вы хотите удалить управляемый объект из хранилища CoreData то вы должны иметь:

  1. Ссылка на NSManagedObjectContext откуда вы удалите объект: context
  2. Ссылка на NSManagedObject, что вы хотите удалить: object

Тогда это будет очень просто удалить объект:

[context deleteObject:object]; 

Вы должны знать,

  1. индекс строки, чтобы удалить, например, i.
  2. извлеките его из своего массива: NSObject *object = [licensePlateArray objectAtIndex:i];
  3. удалите его из db: [context deleteObject: object];
  4. удалить его из массива: [licensePlateArray removeObject: object];
+0

Да, но я не получаю, что, как это сделать, помогите мне пожалуйста, я проводил часы, но по-прежнему нулевой прогресс в этой резолюции вопрос –

+0

Расскажите несколько слов о том, что вы хотите удалить – Nekto

+0

я заселение my table view с основными данными, предположим, что теперь таблица заполнена, и она отображает A, B, C, D. Теперь, когда пользователь делает longpres в строке A или B и т. д., и пользователь выбирает Remove, то это значение Row A или независимо от данных должно быть удален –

0

Вы должны определить свой NSManagedObject а затем вызовите deleteObject на управление dObjectContext. Затем этот объект будет удален из ваших основных данных.

Но вы должны обеспечить механизм, чтобы «каким-то образом» получить объект за определенной строкой таблицы.

Смежные вопросы