问题标签 [message-forwarding]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
879 浏览

objective-c - forwardInvocation:返回值丢失

我想在我的 SZNUnmanagedReference 类上使用消息转发。它具有以下属性:

基本上,当 UnmanagedReference 的实例接收到消息authorsString时,它应该将其转发给referenceDescriptor具有名为 的方法- (NSString *)authorsStringWithSet:(NSSet *)authors

所以,我写了这个SZNUnmanagedReference.m

这一切似乎都有效,SZNReferenceDescriptor类中的代码被执行。但是,我不知道如何authorsString返回。如果我正确理解了文档,我认为referenceDescriptor应该将结果发送回消息的原始发件人。但这似乎不起作用。在我的测试课中,[unmanagedReference authorsString]返回nil.

0 投票
1 回答
901 浏览

objective-c - -forwardInvocation 类方法

我正在努力通过外观类转发类方法。

为了澄清,我将覆盖以下所有方法:

.. 然而,对于类方法,唯一要调用的是+resolveClassMethod. 从那里,无论我返回 YES 还是 NO,我都会立即得到一个无法识别的选择器异常。

这是怎么回事?
类消息转发与实例消息转发的工作方式不同吗?
同样,为什么没有+forwardInvocation类方法?

任何帮助将不胜感激。

0 投票
1 回答
3061 浏览

objective-c - forwardingTargetForSelector: 如何工作?

我有一个UIBarButtonItem. 当它收到无法处理的消息时,我希望它将该消息转发到特定的视图控制器。

我想我也许可以使用条形按钮项的forwardingTargetForSelector:方法来完成此操作,但显然在 type 的对象上找不到这样的属性UIBarButtonItem。(术语点:这是否意味着forwardingTargetForSelector:是私有属性?编辑:等等,我想我很困惑......最后带有冒号的方法不是属性......所以你可以公开一个方法(比如一个getter/setter)传递给哪些参数?)

这是否意味着为了设置 I 的值,forwardingTargetForSelector:我必须在我要设置的对象的 .m 文件中进行设置?这意味着我必须继承我的 UIBarButtonItem?

如果是这样,为什么这不是 NSObjects 的公共属性?

此外,实现我的转发目标的最佳方法是什么,最好避免子类化?

附加信息:

这一切都源于我倾向于重复使用单个动作来响应按下相同按钮的各种实例。该操作当前包含在我的委托中(请参阅我应该如何实现在各种 VC 中使用的 [几乎] 相同的操作?(答案:使用类别))并且不同之处在于它应该向实例化的视图控制器发送 presentViewController 消息发送动作的按钮。因此,在操作中,我可以将 presentViewController 消息发送到sender,这是按钮的一个实例,并且我希望能够将该消息转发到创建该按钮实例的视图控制器,如果我可以做到这一点在每个按钮在其各自的视图控制器中实例化后立即设置它的转发属性。

我希望避免“为什么”只是为了让问题更短,但是你去吧。

0 投票
1 回答
2559 浏览

ios - 使用 ARC 从 NSInvocation 获取块参数

我正在尝试从 NSProxy 的 forwardInvocation 中的 NSInvocation 获取 block 参数:这是正确的语法吗?它会泄漏内存吗?

还是我应该使用?

像对象这样的其他参数类型呢?

我是否必须做其他事情才能正确释放分配的内存?

提前致谢。

0 投票
1 回答
551 浏览

objective-c - Swallow 无法识别来自 NSInvocation forwardInvocation 调用的选择器异常

我有一个正在转发接收消息的对象。它没有实现将它们转发到使用forwardInvocation. 但是,methodSignatureForSelector由于程序的组织方式,在某些时候不会总是返回有效的方法签名。如何吞下缺少方法签名产生的异常?覆盖doesNotRecognizeSelector不起作用。谢谢。

0 投票
1 回答
210 浏览

iphone - ARC 和消息转发

我试图实现消息转发。Xcode 5,ARC 开启,新的默认 iPhone 项目。 我在这里阅读了文档

我的项目中有两个自定义类:HelloWorld.

世界很简单:

在我的 AppDelegate 中,我写了三行简单的代码:

编译器给我一个错误:AppDelegate.m:23:9: No visible @interface for 'Hello' declares the selector 'spin'并且不构建项目。当我重新输入它时:[me performSelector:@selector(spin)];- 它工作正常。

代码[me spin]仅在 ARC 为 OFF 时工作(但编译器会生成警告AppDelegate.m:23:9: 'Hello' may not respond to 'spin')。

我的问题:为什么?以及如何将 ARC 与消息转发一起使用?

0 投票
1 回答
344 浏览

objective-c - Objective-C 消息传递是如何工作的?“超级”在哪里?如何确保一个类在方法调配之前具有其超类的实现?

我对 Obj-C 消息有一些疑问。

(1) 这是我的主要问题:如何确保一个类在混合或调用它之前具有其超类的实现?

如果我想使用目标类未实现但其超类实现的方法进行方法调配,如何确保该类在方法调配之前具有其超类的实现?

我知道当一条消息发送到一个没有实现它的对象时,Obj-C 运行时将首先查找它的继承层次结构以从它的超类中找到实现。如果有,Obj-C 会将其缓存在不同的调度表中并调用它。

我可以使用这个缓存的实现进行方法调配吗?如果可以,如何确保在方法调配或向该对象发送任何消息之前有一个缓存的实现?如果没有,如何向这个类添加一个真正的实现,它只会super在方法调整之前调用 's 的实现?

例如,有这样的类层次结构:

和这样的实现:

我只想在运行时-helloWorld与 Class完全交换(而不是添加)实现。D如果这样的 swizzled 方法,这个技巧将在原始实现中添加一个额外的任务:

因此,当我向 Class或 Class-helloWorld的实例发送消息时,控制台将打印以下消息:DE

有一天,在类D实现-helloWorld如下之后:

并向 Class或 Class-helloWorld的实例发送消息,控制台将打印以下消息:DE

这种方法交换将确保无论类D实现-helloWorld与否都会调用附加任务。

问了一个关于如何使 C 函数调用对象的super实现的问题,这似乎并不容易。Obj-C 是如何实现这种缓存机制来将消息转发到super's implementation 的?

(2) Obj-C 如何处理super关键字?在哪里super

在 Obj-C 消息中,前两个参数是隐藏的:self_cmd. 您可以在 Obj-C 实现中使用它们。但在哪里super

a 是否super等于self'isa指针?Obj-C 如何处理super关键字?

每个 Obj-C 消息都将转换为objc_msgSend()or objc_msgSend_stret()。那么发送到的每条消息super都会转换为objc_msgSendSuper()andobjc_msgSendSuper_stret()吗?

在前面提到的示例中,当我向-helloWorldClass 发送消息并且EClass不响应时,Obj-C 会将消息发送到 Class的实现。在 Class的 implementation 中,它调用了它的 implementation,但 Class没有实现它,所以将它转发给 Class 。DECCsuperBA

在这种情况下,superClassC应该是 Class B,所以它实际上调用了 ClassB的缓存实现,不是吗?我可以调整 ClassB的缓存实现吗?

0 投票
1 回答
5884 浏览

jms - RabbitMQ Shovel 基本示例

我正在研究一个基本示例,但无法解决。

我需要通过队列(TestQ)将消息从一台机器(Machine1)转发到另一台(Machine2)。生产者在 Machine1 上运行,消费者在 Machine2 上运行。

我在 Machine1 的 rabbit broker 配置中的设置:

Machine2 有一个默认配置,没有启用铲子插件。

在 Machine1 上运行的生产者代码:

在 Machine2 上运行的消费者代码:

执行 rabbitmqctl eval 'rabbit_shovel_status:status().' 在机器 1 上:

Producer sends ok, but I never get a receive from the consumer on the Machine2.

Where is a problem? Something is missing in the conf of Machine1's broker, or Machine2's broker?

Thank you!

0 投票
1 回答
6841 浏览

c# - 如何将 HttpRequestMessage 转发到另一台服务器

将 http web api 请求转发到另一台服务器的最佳方式是什么?

这是我正在尝试的:

我有一个 .NET 项目,当我收到某些 API 请求时,我想修改请求,将其转发到另一台服务器,然后返回第二台服务器发送的响应。

我正在执行以下操作:

其中克隆方法定义为:

但是,由于某种原因,我没有将 url 重定向到指定的 redirectUri,而是收到了 404 响应,其中 RequestMessage.RequestUri 设置为http://localhost:61833/api/products/2。(http://localhost:61833是原始请求 uri 的根)。

谢谢

0 投票
2 回答
1226 浏览

objective-c - 消息转发链

我已经阅读了 Apple 的消息转发文档和其他文章,似乎 ObjC 运行时会自动为对象转发无法识别的消息,如果没有匹配的选择器,它会抛出“无法识别的选择器发送到实例”错误。

但是我有两个问题我无法解释。

  • 运行时如何找到下一个消息转发对象?
  • 谁能解释一下 ObjC 消息转发链?