用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
删除它们时,您可以得到通知。