标签: observer-pattern

第二次将观察者添加到NSNotificationCenter会导致EXC_BAD_ACCESS

假设情景:

在我的viewDidLoad方法中,我将视图控制器添加为自定义通知(例如,通知MyFooNotification)的观察者.稍后在加载视图的过程中,通知将被发布,控制器将对其进行处理.当我离开控制器时,我不会删除观察者(故意)viewDidUnload.下次打开视图时,观察者会再次添加,但现在当观察到的通知发布时 - 我明白了EXC_BAD_ACCESS.

任何人都可以解释为什么会这样.

PS我知道我应该删除它,viewDidUnload我只是对较低级别的细节感到好奇.

macos cocoa nsnotificationcenter ios observer-pattern

3
推荐指数
1
解决办法
1381
查看次数

javascript mediator vs观察者

首先,我想说我已经用Google搜索javascript mediator vs observer并阅读了近十个链接.

我也在statckoverflow中搜索,我得到了这个Mediator Vs Observer面向对象的设计模式mediator-vs-observer.

但是我仍然没有清楚地了解它们之间的区别.

所以我想知道是否有人可以更清楚地解释它们?

也许是一个实例.:)

谢谢.


我试图创建一个例子,这是一个中介模式吗?

码:

var EventMediator = {
    publish: function (target, message) {
        var args = Array.prototype.slice.call(arguments, 2);
        var msgs = target.messages || [];
        for (var i = 0; i < msgs.length; i++) {
            var msg = msgs[i];
            msg.callback.apply(msg.context, args);
        }
    },
    register: function (target, message, fn) {
        target.messages = target.messages || [];
        target.messages.push({
            context: target,
            callback: fn
        });
    }
};

var t1 = {name: …
Run Code Online (Sandbox Code Playgroud)

javascript mediator observer-pattern

3
推荐指数
1
解决办法
1075
查看次数

为什么Observer设计模式通常被描述为一对多?

虽然研究Observer pattern我注意到,该之间的连接SubjectObserver通常是一对多的.为什么这样?为什么多对多关系可能导致任何问题?

oop design-patterns software-design observer-pattern

3
推荐指数
1
解决办法
1068
查看次数

统计某个主题的所有订阅数

我有一个主题,我在其中订阅在游戏中发生确定事件时应该调用的方法。

public Subject<SomeEvent> TestSubject = new Subject<SomeEvent>();
Run Code Online (Sandbox Code Playgroud)

某些实例订阅该主题。

TestSubject.Subscribe(MyMethod);
Run Code Online (Sandbox Code Playgroud)

我的目标是计算有多少方法已订阅该主题。我见过一些使用 Count() 扩展的示例,但我需要一个 int 作为返回值,这样我就可以在其他地方使用它,并且 Count() 返回一个 IObservable。

if (subjectCount > 0)
{
    DoSomething();
}
Run Code Online (Sandbox Code Playgroud)

有没有什么方法可以获取某个主题的订阅数量,或者我是否需要手动跟踪它们(有一个 public int subjectSubcriptions 并在每次订阅方法时添加 1)?

c# unity-game-engine reactive-programming system.reactive observer-pattern

3
推荐指数
1
解决办法
740
查看次数

R 闪亮 - 最后点击的按钮 id

我有多个操作按钮,我想在这些按钮上显示不同的选择输入,并且我想知道上次单击的按钮 ID,我该怎么做?当我使用

which(lapply(c(1:10), function(i) { input[[paste0("ActionButton", i)]]}) == TRUE)
Run Code Online (Sandbox Code Playgroud)

它向我显示了所有被点击的按钮,但是我想知道哪个是最后一个,以便再次点击以前的按钮。我怎样才能做到这一点?我是闪亮的新手,不确定是否了解所有反应/隔离问题,所以我会很乐意提供任何提示。

javascript r observer-pattern shiny action-button

3
推荐指数
2
解决办法
2688
查看次数

如何更新Angular Observable的订户

在我的角度应用程序中,我创建了一个Observable来为多个组件提供数据更新。当用户单击按钮时,应使用不同的数据集更新所有可观察对象的订户。下面是代码。

import { Observable } from 'rxjs/Observable';
import { Subscriber } from 'rxjs/Subscriber';

export class MyService {
private data: number[] = [5,6,7,8];

/// The observable given to outside
private observable: Observable<number[]>;

/// Subscribers of the observable which is given to outside
private subscribers: Map<number, Subscriber<number[]>>;
private nextSubscriberId = 0;

constructor() {
    this.subscribers = new Map();
    this.observable = new Observable(subscriber => {
        const id = ++this.nextSubscriberId;
        this.subscribers.set(id, subscriber);

        subscriber.next(data);

        return () => { this.subscribers.delete(id); };
    });

}
Run Code Online (Sandbox Code Playgroud)

}

在按钮单击事件中,我执行以下操作

data = …
Run Code Online (Sandbox Code Playgroud)

observer-pattern angular angular-observable

3
推荐指数
1
解决办法
2620
查看次数

实时数据观察器仅调用一次。当再次调用 api 更新 UI 时,它不会更新服务器的数据

我查找了很多文章,试图了解使用 MVVM 架构时 Live Data 是如何观察变化的。

我有一个 Fragment A、ViewModel 和 Repository 类。onCreateView()ViewModel 在片段的方法中启动。onCreateView()在fragment方法中紧接着启动API调用。来自服务器的数据是通过片段的方法观察的。onViewCreated

首先,它运行得非常好。但是当我从另一个片段 B 更新用户名并返回片段 A 时。

Fragment A 的方法中再次调用 ApionResume()来更新 UI。但这里我的实时数据不再被观察到,UI 也没有更新

我不明白我做错了什么?为什么观察者不触发第二次?

下面是代码

class FragmentA : Fragment(){

    private lateinit var dealerHomeViewModel: DealerHomeViewModel
  
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
    }

    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
        val view = inflater.inflate(R.layout.fragment_home_dealers, container, false)

        val dealerHomeFactory = DealerHomeFactory(token!!)
        dealerHomeViewModel = ViewModelProvider(this,dealerHomeFactory).get(DealerHomeViewModel::class.java)

      dealerHomeViewModel.getDealerHomeData()
        return view
    }

 override fun …
Run Code Online (Sandbox Code Playgroud)

android mvvm viewmodel observer-pattern android-livedata

3
推荐指数
1
解决办法
3249
查看次数

我们可以在 Laravel 的 Attach 方法上使用观察者吗?

我想观察一个数据透视表,其中的行是在特定模型中使用附加方法创建的,有没有办法通过负责创建行的附加方法来观察该数据透视表?

pivot-table observers observer-pattern laravel laravel-8

3
推荐指数
1
解决办法
1633
查看次数

@Observes在sessionscoped bean中?

以下情况可能吗?

"SessionService"是一个无状态EJB,它触发一个事件"LoggedInEvent".调用具有观察LoggedInEvent的非静态方法的SessionScoped(Weld)bean"SessionBean",并为该特定用户初始化一些内容.

是否调用了"SessionBean"的正确实例?所有实例都被调用了?我在文档中找不到任何内容.

events cdi java-ee-6 observer-pattern

2
推荐指数
1
解决办法
1432
查看次数

字符串值更改时RxAndroid更新字段/ Textview

我刚刚开始使用RxJava/RxAndroid,我想知道我是否可以使用它来解决以下问题.基本上,给定一个Field,比如一个textview,一个值,一个字符串,我正在寻找一种方法来在字符串的值发生变化时自动更新textview.我不确定如何将其作为Observable实现.让我来证明一下;

String str = "Test"; //the string value
TextView textView = (TextView) findViewById(R.id.textView); //the textview

Observable o = //looking for this part. Want to observe the String str

o.subscribe(new Observer<String>() { //subscribe here looking for string changes

            @Override
            public void onCompleted() {
                System.out.println("Completed");
            }

            @Override
            public void onError(Throwable e) {
            }

            @Override
            public void onNext(String s) {
                textView.setText(s); //update the textview here
            }

        });

//here is where the string changes, it could be hardcoded, user input, or   
//anything else really, …
Run Code Online (Sandbox Code Playgroud)

android observer-pattern rx-java rx-android

2
推荐指数
1
解决办法
2155
查看次数