【问题标题】:Delete object in Core Data删除核心数据中的对象
【发布时间】:2012-06-17 20:50:40
【问题描述】:

如何删除我之前使用此代码添加的对象。它是一个收藏夹部分,在开始时,我添加了一个灰色星形,它添加了一个来自 fetch 的对象。然后它变成黄色,向后的方法应该是星黄色=删除。

但我不知道该怎么做。

-(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];

}

更新

我做了这个方法..它完成了工作:)

-(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 进行更改

标签: iphone ios xcode core-data


【解决方案1】:

很简单:)

[context deleteObject:favorisObj];

而坏的对象都不见了。

更新

如果你需要一个按钮来删除对象,你只需用类似这样的东西来反转它。

-(IBAction)removeFavoris:(id)sender {

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

    NSManagedObjectContext *context = [appDelegate managedObjectContext];

    [context deleteObject:favorisObj];
}

【讨论】:

  • 好的,但是我怎样才能做出与上面相反的方法呢?
  • 我必须像上面一样声明喜爱的对象??它仍然没有删除任何东西:(
  • 您在上面创建了 favourisObj 然后向其中添加内容。您需要获取相同的对象并将其作为参数传递给[context deleteObject:arg]
  • 是的,您必须有一个对象才能传入。您不能只输入名称。你需要一个指向它的指针。
  • 是的。对象与它们的上下文密切相关。如果您需要以任何方式从另一个上下文访问它,请将对象与其原始上下文一起保存,然后在执行这些更改之前从新上下文中获取它。
【解决方案2】:

删除 NSManagedObject 后不要忘记保存 Context。所以这里是通用代码;

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

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

在你的情况下,它应该在 for 循环之后有 sn-p。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-11-07
    • 1970-01-01
    • 1970-01-01
    • 2016-10-27
    • 2013-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多