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 が実際の Alarms セットを指していない可能性があるため、実際の Alarm オブジェクトではないことを指摘していると思います。こんな時どうしたらいいの?と思いました。ありがとう!

4

1 に答える 1

0

あなたは何をするのか混乱しているだけですremoveLastObject。返される配列からオブジェクトを削除sortedItemsし、Alarmオブジェクト、コンテキスト、または永続ストアには何もしません。私はここのデザインが好きではありませんが、あなたが持っているものを考えると、あなたは次のことができるはずです。

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

これにより、Alarm NSManagedObjectがコンテキストから削除され、コンテキストが保存されます(永続ストアに永続化されます)。次に、変更を反映するようにテーブルをリロードする必要があります。

于 2013-01-24T05:26:12.420 に答える