标签: observer-pattern

iPhone - 正在释放类的一个实例,而键值观察仍在其中注册

由于NavigationController,我有一个推入的ViewController(带有MKMapView).所以我有一个带有"后退"按钮的NavBar.单击该后退按钮,我收到一个错误:

2010-01-11 18:05:35.273 TestApp [147:207]正在释放类MKUserLocation的实例0x1758f0,而键值观察者仍然在其中注册.观察信息被泄露,甚至可能被错误地附加到其他物体上.在NSKVODeallocateBreak上设置断点以在调试器中停止.这是当前的观察信息:(上下文:0x0,属性:0x17d600>)程序接收信号:"EXC_BAD_ACCESS".

我有一个使用Observer实现的viewDidLoad方法:

- (void)viewDidLoad {
    mapView = (MKMapView*)self.view;
    mapView.delegate = self;
    mapView.mapType = MKMapTypeHybrid;
    mapView.showsUserLocation = YES;

    // ...

    [mapView.userLocation addObserver:self forKeyPath:@"location" options:0 context:NULL];
    [super viewDidLoad];
Run Code Online (Sandbox Code Playgroud)

}

我的dealloc:

- (void)dealloc {
    [groupId release];
    [[NSNotificationCenter defaultCenter] removeObserver:self];
    [super dealloc];
}
Run Code Online (Sandbox Code Playgroud)

谁能告诉我这里有什么问题?我单击NavBar中的后退按钮然后我进入dealloc方法,然后它切换回更高的ViewController并抛出此错误.

非常感谢提前和最诚挚的问候.

iphone key-value-observing uinavigationcontroller observer-pattern

7
推荐指数
1
解决办法
6807
查看次数

在java中避免使用instanceof运算符时观察多个observable?

如果我有一个对象,我希望能够观察其他几个可观察对象,而不是所有相同的类型.例如,我希望A能够观察B和C.B和C完全不相关,除了它们都实现了Observable.

显而易见的解决方案是在更新方法中使用"if instanceof",但很快就会变得混乱,因此我想知道是否还有其他方法?

java observer-pattern

7
推荐指数
2
解决办法
9329
查看次数

如何使用java.beans包替换(现已弃用)Observable和Observer?

随着Java 9的到来,Observable类和Observer接口现已弃用.

Observablejavadoc的状态:

[Observable]和Observer接口已被弃用.Observer和Observable支持的事件模型非常有限,Observable提供的通知顺序未指定,状态更改不与通知一一对应.对于更丰富的事件模型,请考虑使用java.beans包.

它建议使用该java.beans包,但是如何使用它来创建一个模拟Observer模式的事件处理程序呢?

java javabeans observable observer-pattern java-9

7
推荐指数
0
解决办法
672
查看次数

如何触发magento收到的付款事件?

问候,在Magento我想触发一个事件,一旦订单被设置为处理(通过网关确认或手动),例如:如果一般客户(ID 1)花费超过100美元并且付款已经确认,请设置他的团体ID为4(银色VIP,按照促销规则在全球获得2%折扣)我会给予赏金,但我想在2天之前得到答案O_o

编辑:到目前为止我收到的答案只是一个部分答案,我也发现链接非常混乱,我不清楚什么是最小设置,我有什么配置创建等...我也在尝试了解如何获得付费客户ID /型号.

php triggers magento observer-pattern

6
推荐指数
1
解决办法
1万
查看次数

更新:如何在原型中的DOM节点上查找事件侦听器?

我正在寻找这个问题的最新答案.

在Prototype 1.6+中似乎不再使用Event.observers(可能是为了避免内存泄漏),那么如何追踪哪些事件监听器附加到元素?

我知道Firebug有一个"下一个中断"按钮,但是在我可以获得我想要的另一个特定元素的行为之前,body元素上有几个鼠标侦听器,所以还有其他方法吗?

javascript events listener prototypejs observer-pattern

6
推荐指数
2
解决办法
5856
查看次数

Reactive Extension - 新版本中旧版本的问题使用方法

我是.NET的新手我之前的工作是PLC程序员.我有旧的应用程序,我使用Reactive Extension for .NET.

我很长时间没有维护这个应用程序.现在我为Reactive Extension下载了新版本,但是我在使用旧代码时遇到了问题.

我知道Rx中的某些部分已经改变了.

这是旧代码的问题:

    Observable.FromEvent<PropertyChangedEventArgs>(this, "PropertyChanged")
    .Where(e => e.EventArgs.PropertyName == "Nick")
    .Select(_ => this.Nick)
    .Where(text => text.Length > 3)
    .Do(LoadUser)
    .Throttle(TimeSpan.FromSeconds(3000))
    .Subscribe(LoadUser);
Run Code Online (Sandbox Code Playgroud)

我有这个例外:

Error   3   Argument 1: cannot convert from 'Spirit.ViewModels.AddFriendViewModel' to 'System.Action<System.Action<System.ComponentModel.PropertyChangedEventArgs>>'    E:\C#_Projects\Pokec_Messenger\Spirit_Caliburn_Micro_v1.0\ViewModels\AddFriendViewModel.cs  123 60  Spirit_Caliburn_Micro_v1.0
Error   4   Argument 2: cannot convert from 'string' to 'System.Action<System.Action<System.ComponentModel.PropertyChangedEventArgs>>'  E:\C#_Projects\Pokec_Messenger\Spirit_Caliburn_Micro_v1.0\ViewModels\AddFriendViewModel.cs  123 65  Spirit_Caliburn_Micro_v1.0
Error   2   The best overloaded method match for 'System.Reactive.Linq.Observable.FromEvent<System.ComponentModel.PropertyChangedEventArgs>(System.Action<System.Action<System.ComponentModel.PropertyChangedEventArgs>>, System.Action<System.Action<System.ComponentModel.PropertyChangedEventArgs>>)' has some invalid arguments E:\C#_Projects\Pokec_Messenger\Spirit_Caliburn_Micro_v1.0\ViewModels\AddFriendViewModel.cs  123 13  Spirit_Caliburn_Micro_v1.0
Run Code Online (Sandbox Code Playgroud)

我不知道在新版本中我必须使用哪种方法来获得相同的功能.

谢谢你的建议.

c# system.reactive observer-pattern

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

如何使用dunit的DUnitWizard中包含的XPObserver单元来实现观察者模式,甚至是MVC模式?

有在Delphi Observer模式很好的例子,由于#2明智的问题与解答,如 落实在Delphi观察者模式的最佳方式是否有任何影片/屏幕投射或如何在Delphi使用接口其他资源?.从这些stackoverflow问题中,提取以下指导材料链接:

  1. 乔安娜卡特的博客

  2. SourceMaking网站

  3. TDelphiHobbyist的博客

  4. itte.no网站

  5. dunit的DUnitWizard

在第二个stackoverflow问题中,mghie描述dunit's DUnitWizard's XPObserver.pas为非常有趣,其他值得XP*.pas仔细研究.然而,该XPObserver单元被引用只在两个地方,在dunit\Contrib\DUnitWizard\Source\Common\dunit\XPObserverTests.pas那里测试的唯一的兴趣似乎是检查引用计数的,并且dunit\Contrib\DUnitWizard\Source\DelphiExperts\DUnitProject\XPTestedUnitUtils.pas只有在使用中XPObserver单元声明的IXPFamily类型.

因此,我想知道使用这个XPObserver装置的最佳做法是什么.

例如:设计问题,例如:

(1)如何使用XPObserver单元来实现做某事的观察者模式?

(2)如何使用XPObserver实现MVC模式?

或编码问题如:

(3)XPObserverTXPSubjects被声称提供使能的能力single observer<->multiple subject的关系.但是,FSubjects被宣布为私人.也没有吸气剂.我想知道这是设计的吗?(例如,作者写// ...***DON'T*** refactor this method!!TXPSubject.DeleteObserver.我这样不自信修改代码,因为我不明白这一点,也许其他部分完全).如果是的话,使用TXPSubjects使该咋办方式single observer<->multiple subject的关系?

非常感谢您的时间和意见!

delphi oop model-view-controller dunit observer-pattern

6
推荐指数
1
解决办法
286
查看次数

INotifyPropertyChanged vs IObservable - RxExtensions,其中一个用于观察者模式

在这里对业务层核心进行大规模重新分解,我需要一些帮助来选择/实现更好的设计模式和实现.

题:

  1. 在ASP MVC,业务层上下文中,IObservable何时支配INotifyPropertyChanged
  2. 哪一个是genericObserableFactoryObject的设计模式的更好实现
  3. 我非常喜欢weakEventListener,因为内存泄漏问题较低,http://msdn.microsoft.com/en-us/library/hh199438.aspx,这是否仅适用于线程和线程调度

我的尽职调查:我理解INPC属于属性级别,另一个是更多的概念对象级别,但使用LINQ似乎IObservable可能是选择.但是,嵌入任何对象内部的简单性和灵活性很诱人.

因此,我只需要帮助理解两者的设计意图/目的/动机,哪一个是观察者模式工厂的最佳重用.

另外,知道任何地方,我可以获得观察员工厂的代码片段

architecture data-binding system.reactive observer-pattern

6
推荐指数
1
解决办法
2708
查看次数

在会议室中使用哪一个:LiveData或RxJava?

我正在使用Room进行数据库管理,而在处理实时数据时该使用什么却感到困惑。现在,要管理我正在使用的实时数据,我对此Flowable非常满意。我感到困惑的是,我也可以使用LiveData它来执行相同的操作。

为了提供一些背景信息,这是我查询数据和更新视图的方式。

流动性

addDisposable(userDao().getUsersFlowable()
    .subscribeOn(Schedulers.io())
    .observeOn(AndroidSchedulers.mainThread())
    .subscribe(users -> userAdapter.setUsers(users)));
Run Code Online (Sandbox Code Playgroud)

实时数据

userDao().getUsersLiveData()
    .observe(this, users -> {
        userAdapter.setUsers(users)
    })
Run Code Online (Sandbox Code Playgroud)

我不太熟悉LiveData,但是就我的研究而言,它是一个观察者模式,它也知道生命周期,这意味着我将停止通知UI是否未处于活动状态。就是说,正如您在我的Flowable代码中看到的那样,我将其添加到其中CompositeDisposable,并将在我的onDestroy()方法中进行处理。因此,我看不出为什么我应该使用LiveData什么时候可以用进行管理RxJava,因为为了方便起见,该操作有很多运算符。

所以我应该何时使用,LiveData以及何时RxJava使用Room。反映给定方案的答案非常受赞赏,但也欢迎其他用例。

我遵循了何时在Android中使用RxJava以及何时从Android Architectural Components中使用LiveData?,但范围太广,我无法具体回答我的情况

observer-pattern rx-java rx-java2 android-room android-livedata

6
推荐指数
1
解决办法
824
查看次数

超越基本思想理解 C++ 中的观察者模式

我正在从《Head First Design Patterns》学习设计模式,为了获得自信,我计划在学习相应的章节后用 C++ 实现每个模式。

关于观察者模式,我真的很难超越语言独立的主要思想。

我浏览过以下内容:

但是,当我开始使用 C++ 进行编码时,一些特定于语言的困难暴露了我对整个主题的一些误解,而我无法通过上述方法解决这些误解。然而,我在这里发帖是因为我有一个(看似)工作代码。

示例代码如下,之后我列出了我对该模式的理解和使用的一些担忧。

#include <algorithm>
#include <iostream>
#include <unordered_map>
#include <unordered_set>

class Observer {
 public:
  virtual void update() = 0;
};

class Observable {
 protected:
  std::unordered_set<Observer*> observers;
 public:
  virtual void addObserver(Observer&) = 0;
  virtual void removeObserver(Observer&) = 0;
  virtual void notifyObservers() = 0;
};

class Virus : public Observable {
 public:
  void addObserver(Observer& o) {
    observers.insert(&o);
  };
  void removeObserver(Observer& o) {
    std::erase_if(observers, [&o](auto const& …
Run Code Online (Sandbox Code Playgroud)

c++ observer-pattern

6
推荐指数
1
解决办法
2851
查看次数