gpt4 book ai didi

iphone - 查找 NSUndoManager 正在作用于哪个对象

转载 作者:行者123 更新时间:2023-11-29 04:44:05 26 4
gpt4 key购买 nike

在我的应用中,用户能够在对象之间快速来回切换并编辑这些对象上的文本。

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

这些对象是 NSManagedObject 子类的实例,我使用的是创建 UIManagedDocument< 时获得的 managedObjectContext 附带的撤消管理器。/.

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

如何判断给定撤消操作正在“撤消”哪个对象?

最佳答案

所以我明白了这一点。我需要的方法是:

  • (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];
}

在接收者的 viewWillAppear 中,我注册了通知:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(didAwakeManagedObject:) name:@"awakeFromSnapshotNotification" object:nil];

最后,我的接收者的 didAwakeManagedObject: 方法如下所示。可能有更好的方法来做到这一点,但这对我来说效果很好。我碰巧关心由 Core Data 支持的 NSOrderedSet 中所需对象的索引位置,因此我只是迭代有序集,直到找到正确的集合。

- (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;
}
}
}

关于iphone - 查找 NSUndoManager 正在作用于哪个对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9898676/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com