我有一个父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集。我想知道在这种情况下我应该做些什么?谢谢!
答案 0 :(得分:0)
您只是对removeLastObject
所做的事情感到困惑。它正在从sortedItems
返回的数组中删除对象,它没有对Alarm对象,上下文或持久存储执行任何操作。我不喜欢这里的设计,但鉴于你拥有的,你应该能够做到以下几点。
Alarm *alarmToDelete = [[self sortedTimes] lastObject];
[myManagedObjectContext deleteObject:alarmToDelete];
[myManagedObjectContext save:&error];
这将从您的上下文中删除Alarm NSManagedObject并保存上下文(将其保存到您的持久存储中)。然后,您需要重新加载表格,以便反映更改。