删除作为父NSManagedObject集的一部分的NSManagedObject

时间:2013-01-24 04:50:31

标签: ios core-data

我有一个父NSManagedObject(Person),每个人都可以有警报,这也是一个NSManagedObject。当我转到Person对象的详细视图来查看警报时,我希望能够删除警报。我目前在桌子上展示的内容:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    static NSString *SimpleCellIdentifier = @"SimpleCellIdentifier";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:SimpleCellIdentifier];

    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:SimpleCellIdentifier];
    }

    NSDate *theDate = [[self sortedTimes] objectAtIndex:indexPath.row];
    cell.textLabel.text = [self.dateFormatter stringFromDate:theDate];

    return cell;
}

- (NSMutableArray *)sortedTimes {
    NSMutableArray *tempArray = [[NSMutableArray alloc] initWithArray:[self.person.alarms allObjects]];     // Alarm NSManagedObject
    tempArray = [tempArray valueForKey:@"time"];                                                            // NSDate value
    return [[NSMutableArray alloc] initWithArray:[tempArray sortedArrayUsingSelector:@selector(compare:)]];
}

所以我认为我可以通过以下方式删除最后一个对象:

[[self sortedTimes] removeLastObject];
[self saveContext];

但我相信我得到的不是实际的Alarm对象,因为我的sortedTimes可能没有指向实际的Alarms集。我想知道在这种情况下我应该做些什么?谢谢!

1 个答案:

答案 0 :(得分:0)

您只是对removeLastObject所做的事情感到困惑。它正在从sortedItems返回的数组中删除对象,它没有对Alarm对象,上下文或持久存储执行任何操作。我不喜欢这里的设计,但鉴于你拥有的,你应该能够做到以下几点。

Alarm *alarmToDelete = [[self sortedTimes] lastObject];
[myManagedObjectContext deleteObject:alarmToDelete];
[myManagedObjectContext save:&error];

这将从您的上下文中删除Alarm NSManagedObject并保存上下文(将其保存到您的持久存储中)。然后,您需要重新加载表格,以便反映更改。