使用where子句从coredata中删除记录

时间:2016-07-29 07:21:18

标签: ios objective-c core-data

我有一个实体(UserDetails),它有两列(用户名,密码)。 例如: enter image description here

从此我填充不同的值并在表格视图中显示它们。

     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

2 个答案:

答案 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;
    }
}