gpt4 book ai didi

ios - 无法使用 ReactiveCocoa 观察 NSMutableSet 添加

转载 作者:行者123 更新时间:2023-11-29 12:48:10 25 4
gpt4 key购买 nike

我有一个简单的 View Controller ,它有一个名为 selectedEmails 的 NSMutableSet 属性。在 viewDidLoad 中,我创建空集并订阅更改:

self.selectedEmails = [NSMutableSet set];
[RACObserve(self, selectedEmails) subscribeNext:^(id emails) {
NSLog(@"set: %@", emails);
}];

出于调试目的,我随后将一个项目添加到 viewDidAppear: 中的集合。但是,订阅 block 只会针对初始空集触发一次,而不会针对新的更新集触发。

这是为什么?我该如何修复它以便观察变化?我在 the answer to a different question 中看到你不能观察一个集合而只能观察包含它的类——这是否意味着 ReactiveCocoa 不能在集合上工作?

最佳答案

我想你没有收到通知,因为你正在观察一个指向 selectedEmails 的指针,并且就 ReactiveCocoa 而言,这个值没有改变。该位置包含的信息已更改(即对象已发生变异),但指针本身仍引用同一对象。

对于您尝试做的事情,没有“即插即用”的解决方案。除了 answer you linked 中提出的方法之外和 the one in the comments above ,您还可以采用更穴居人风格的方法,而不是使用可变集,而是使用常规集并在您想要更改集时创建一个新对象。

请注意,这是一种麻烦的方法并且很容易出现人为错误,因此您可能应该选择所提到的其他方法之一。

@property NSSet* selectedEmails;

// Create it
self.selectedEmails = [NSSet set];

// Add to it
self.selectedEmails = [self.selectedEmails setByAddingObject:someObject];

// Remove from it
NSMutableSet* mutableCopy = [self.selectedEmails mutableCopy]:
[mutableCopy removeObject:someObject];
self.selectedEmails = mutableCopy;

关于ios - 无法使用 ReactiveCocoa 观察 NSMutableSet 添加,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23121063/

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