0

我有一个父 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];

但我相信我指向的不是实际的警报对象,因为我的 sortedTimes 可能不指向实际的警报集。我想知道在这种情况下我应该怎么做?谢谢!

4

1 回答 1

0

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

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

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

于 2013-01-24T05:26:12.420 回答