Вопрос по xcode, ios, iphone, core-data – Удалить объект в Core Data

26

Как я могу удалить объект, который я добавил ранее с этим кодом. Это раздел избранного, в начале я добавляю серую звездочку, которая добавляет объект, извлекаемый из выборки. Затем он становится желтым, и обратный метод должен быть звездным, желтый = удаляет.

Но я понятия не имею, как это сделать.

заранее спасибо

-(IBAction)inFavoris:(id)sender {



AppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];

NSManagedObjectContext *context = [appDelegate managedObjectContext];
NSManagedObject *favorisObj = [NSEntityDescription
                            insertNewObjectForEntityForName:@"Favoris"
                            inManagedObjectContext:context];


[favorisObj setValue:idTaxi forKey:@"idTaxi"];
[favorisObj setValue:nomTaxi forKey:@"nomTaxi"];
[favorisObj setValue:taxiCB forKey:@"cb"];
[favorisObj setValue:taxiAvion forKey:@"avion"];
[favorisObj setValue:taxiColis forKey:@"colis"];
[favorisObj setValue:taxiHandicape forKey:@"handicape"];
[favorisObj setValue:taxiHoraires forKey:@"horaire"];
[favorisObj setValue:lugagge forKey:@"lugagge"];
[favorisObj setValue:luxury forKey:@"luxury"];
[favorisObj setValue:languesParlees forKey:@"langues"];
[favorisObj setValue:taxiNote forKey:@"note"];
[favorisObj setValue:taxiPassengers forKey:@"passenger"];
[favorisObj setValue:taxiVote forKey:@"etoiles"];
[favorisObj setValue:taxiTel forKey:@"tel"];


[self.view addSubview:favorisB];

}

UPDATe

Я сделал этот метод .. Он выполняет свою работу :)

-(IBAction)outFavoris:(id)sender {


AppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];
NSString *testEntityId = idTaxi;
NSManagedObjectContext *moc2 = [appDelegate managedObjectContext];

NSFetchRequest *fetch = [[NSFetchRequest alloc] init];
fetch.entity = [NSEntityDescription entityForName:@"Favoris" inManagedObjectContext:moc2];
fetch.predicate = [NSPredicate predicateWithFormat:@"idTaxi == %@", testEntityId];
NSArray *array = [moc2 executeFetchRequest:fetch error:nil];




for (NSManagedObject *managedObject in array) {
    [moc2 deleteObject:managedObject];
}


[self.view addSubview:favorisO];

} 
Вы должны наконец сохранить managedObject, чтобы внести изменения в coredata Jitendra Modi

Ваш Ответ

2   ответа
62

Это довольно просто :)

[context deleteObject:favorisObj];

И плохой объект исчез.

Update

Вы просто измените это на нечто подобное, если вам нужна кнопка для удаления объекта.

-(IBAction)removeFavoris:(id)sender {

    AppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];

    NSManagedObjectContext *context = [appDelegate managedObjectContext];

    [context deleteObject:favorisObj];
}
Хорошо, но как я могу сделать метод, противоположный описанному выше? Tidane
Я получаю красную ошибку, причина favisObj не найден Tidane
Да. Объекты очень привязаны к своему контексту. Если вам необходимо каким-либо образом получить к нему доступ из другого контекста, сохраните объект с его исходным контекстом, а затем извлеките его из нового контекста перед выполнением этих изменений.
Выше вы создаете favisObj, а затем добавляете в него материал. Вам нужно взять тот же объект и передать его в качестве аргумента[context deleteObject:arg]
Я должен объявить favisObj как выше ?? Он по-прежнему ничего не удаляет :( Tidane
25

Не забудьте сохранить контекст после того, как вы удалили NSManagedObject. Итак, вот общий код;

NSManagedObjectContext * context = [self managedObjectContext];
[context deleteObject:objectToDelete];

NSError * error = nil;
if (![context save:&error])
{
    NSLog(@"Error ! %@", error);
}

В вашем случае он должен иметь фрагмент после цикла for.

for (NSManagedObject *managedObject in array) {
    [moc2 deleteObject:managedObject];
}
NSError * error = nil;
if (![context save:&error])
{
    NSLog(@"Error ! %@", error);
}

Похожие вопросы