Iphone 查找NSUndoManager正在处理的对象

Iphone 查找NSUndoManager正在处理的对象,iphone,ios,xcode,Iphone,Ios,Xcode,在我的应用程序中,用户可以在对象之间快速切换,并编辑这些对象上的文本 当他们按下“撤消”时,我想调出相关对象,以便他们可以看到正在执行的撤消 这些对象是NSManagedObject子类的实例,我正在使用创建UIManagedDocument时获得的managedObject上下文附带的撤消管理器 否则,撤消和重做功能正常 对于给定的撤消操作,我如何判断哪个对象正在被“撤消”?因此我找到了答案。我需要的方法是: (void)awakeFromSnapshotEvents:(NSSnapshot

在我的应用程序中,用户可以在对象之间快速切换,并编辑这些对象上的文本

当他们按下“撤消”时,我想调出相关对象,以便他们可以看到正在执行的撤消

这些对象是
NSManagedObject
子类的实例,我正在使用创建
UIManagedDocument
时获得的
managedObject上下文
附带的撤消管理器

否则,撤消和重做功能正常


对于给定的撤消操作,我如何判断哪个对象正在被“撤消”?

因此我找到了答案。我需要的方法是:

  • (void)awakeFromSnapshotEvents:(NSSnapshotEventType)标志
可以在NSManagedObject的子类中重写

只要对象受到撤消或重做的影响,就会调用此方法。我以前的印象是,只有在撤消插入或删除对象时才会调用它,但如果对象也发生了更改,就会调用它

我在这个方法中所做的是发布一个包含objectID的通知,然后当我收到该通知时,我去寻找与我收到的objectID对应的对象

因此,在我的NSManagedObject子类中,我的awakeFromSnapshotEvents如下所示:

- (void)awakeFromSnapshotEvents:(NSSnapshotEventType)flags {
   NSManagedObjectID *thisID = self.objectID;
   NSDictionary *userInfo = [NSDictionary dictionaryWithObject:thisID forKey:@"noticeObjectID"];
   [[NSNotificationCenter defaultCenter] postNotificationName:@"awakeFromSnapshotNotification" object:self userInfo:userInfo];
}
在接收者的视图中将出现,我注册通知:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(didAwakeManagedObject:) name:@"awakeFromSnapshotNotification" object:nil];
最后,我的接收者的
didAwakeManagedObject:
方法如下所示。也许有更好的方法,但这对我来说很好。我碰巧关心的是我需要的对象在由核心数据支持的数据集中的索引位置,所以我只是在有序集中迭代,直到找到正确的一个

- (void) didAwakeManagedObject:(NSNotification*)notice {
   for (int i=0; i<project.orderedSet.count; i++) {
      if ([notice.userInfo objectForKey:@"noticeObjectID"] == [[project.orderedSet objectAtIndex:i] objectID]) {
         NSLog(@"%d IS EQUAL", i);
         return;
      }
   }
}
-(作废)didAwakeManagedObject:(NSNotification*)通知{
对于(int i=0;i