我有一个实体(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)
现在我想在表格视图中添加一个删除功能,该功能应该从表格和核心数据记录中删除。
由于它们没有以与coredata模型相同的顺序填充,我想使用where
子句之类的东西来删除它。因此,每当我删除(abc,def)时,它应该删除coredata中的所有类似记录。
有人可以帮忙解决这个问题吗?
TIA
答案 0 :(得分:2)
使用iOS 9 DELETE
可用。您可以使用它来删除CoreData中的对象,类似于SQL
中使用WHERE
子句的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
,则可以在这些对象被删除时收到通知,从而将其从@PrepareForTest(LocalDateTime.class)
中删除。
答案 1 :(得分:2)
你可以这样做:
+(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;
}
}