用where子句从coredata中删除logging

我有一个实体(UserDetails),它有两列(用户名,密码)。 例如: 在这里输入图像说明

从这我填充不同的值,并显示在一个表视图。

NSEntityDescription *entity = [NSEntityDescription entityForName:@"UserDetails" inManagedObjectContext:managedObjectContext]; NSFetchRequest *request = [[NSFetchRequest alloc] init]; [request setEntity:entity]; [request setResultType:NSDictionaryResultType]; [request setReturnsDistinctResults:YES]; [request setPropertiesToFetch:@[@"username",@"password"]]; //not sure if this will generate the same output as what I'm thinking of. self.users = [[managedObjectContext executeFetchRequest:request error:nil] mutableCopy]; [self.tableView reloadData]; 

预期输出(来自上面的代码):

  • (ABC,DEF)

  • (ABC,XYZ)

  • (ABC123,def123)

  • (S01,S01)

    现在我想添加一个删除function到表格视图,它应该从表格和核心数据logging中删除。

由于它们不是以与coredata模型相同的顺序填充的,所以我想使用类似于where子句的东西来删除它。 所以每当我删除(abc,def)它应该删除coredata中的所有相似的logging。

有人可以帮助如何解决这个问题?

TIA

你可以这样做:

 +(BOOL)deleteDataFromUserDetailsTableWithUserName:(NSString*)strUsername AndPassword :(NSString*)strPassword; { AppDelegate *objApDel = (AppDelegate *)[[UIApplication sharedApplication]delegate]; NSManagedObjectContext *context = [objApDel managedObjectContext]; NSEntityDescription *userEntity=[NSEntityDescription entityForName:kTableName inManagedObjectContext:context]; NSFetchRequest *fetch=[[NSFetchRequest alloc] init]; [fetch setEntity:userEntity]; NSPredicate *p=[NSPredicate predicateWithFormat:@"username == %@ AND password=%@", strUsername,strPassword]; [fetch setPredicate:p]; //... add sorts if you want them NSError *fetchError; NSArray *fetchedDetails=[context executeFetchRequest:fetch error:&fetchError]; for (self.users *details in fetchedProducts) { [context deleteObject:details]; } if (fetchError == nil) { return YES; } else { return NO; } } 

使用iOS 9 NSBatchDeleteRequest可用。 您可以使用WHERE子句从CoreData中删除类似DELETE对象。

 NSFetchRequest *request = [[NSFetchRequest alloc] initWithEntityName:@"UserDetails"]; NSPredicate *predicate = [NSPredicate predicateWithFormat:@"username==%@ AND password=%@", @"abc", @"def"]; [request setPredicate:predicate]; NSBatchDeleteRequest *deleteRequest = [[NSBatchDeleteRequest alloc] initWithFetchRequest:request]; NSError *error = nil; [myPersistentStoreCoordinator deleteRequest withContext:myContext error:&error]; 

对于以前的版本,您必须首先获取所有对象,然后单独删除它们。 没有别的办法。

另外,如果您使用的是NSFetchedResultsController那么当这些对象被删除,并从UITableView删除它们时,您可以得到通知。