问题标签 [nsinvocation]

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 投票
0 回答
143 浏览

nsinvocation - 如何使用 NSInvocations 传递完成块?

我有一个应用程序向我的服务器发出签名请求。所有请求都需要身份验证令牌。每当我发出请求时,如果未找到身份验证令牌,我会使用 NSInvocation 存储该请求,查询身份验证令牌,调用我的调用,然后返回带有完成块的原始调用方法。

我的问题是,如何正确地将返回块传递给 NSInvocation?我没有错误,但由于某种原因,[someClass listFilesWithCompletionBlock] 的完成块的原始调用者永远不会触发。

0 投票
1 回答
387 浏览

objective-c - 基于索引的 Objective-C 参数值的获取

我想用正确的参数值为NSInvocation当前方法动态创建。通常,人们可能会这样做:

显式设置参数值很简单,我们可以这样做:

我希望能够通过以下方式循环执行此操作:

困难的部分是动态获取给定索引的参数值。

这里问了一个类似的问题,回答者说他不知道引用类复杂性的解决方案。我不同意复杂性 - 在底层代码中,我们已经确切地知道堆栈在设置堆栈框架后应该如何看待,因为编译器知道使用的调用约定。例如,在 x86 上,stdcall我们可以轻松访问参数值,因为我们知道它们是固定偏移量ebp

  • ebp0(%ebp)
  • 返回地址为4(%ebp)
  • 第一个参数8(%ebp)
  • 等等

我怎样才能实现我想要的,或者语言中真的不存在任何机制来支持基于索引的参数值获取?在这一点上,我可以接受这是真的,因为 C 标准中不存在这样的特性。但是,我想得到确认和/或解释这背后的原因。

0 投票
3 回答
5687 浏览

ios - 定义没有基类的 Objective-C 类 - 编译器警告

我正在使用Matt GallagherNSInvocation的以下代码作为我的撤消/重做代码。虽然使用最新版本的 xCode 我没有收到警告说:NSInvocation(ForwardedConstruction).m:28:12: Class 'InvocationProxy' defined without specified a base class

代码运行良好,但我团队中的其他人(我也是)不喜欢看到警告。我希望类尽可能精简,所以我不希望 NSObject 中的所有方法。

欢迎任何建议!

谢谢!

NSInvocation(ForwardedConstruction).h

NSInvocation(ForwardedConstruction).m

0 投票
2 回答
3310 浏览

objective-c - NSInvocation setArgument 不适用于简单的 int32_t

在将 NSInvocation 与不是对象的参数一起使用时,我遇到了一个问题。我传递的简单整数值被更改为不同的值。

这是我正在调用的方法:

这就是我所说的:

结果是记录的不是我传递的简单的 123456 值,而是这样的:

** * ***180774176** * ** * ***

我做错了什么?

我对 Objective C 很陌生,但是我需要在运行时调用一个我无法控制的方法。它以 int64_t 作为参数类型。

请问有人可以帮忙吗?谢谢....

0 投票
2 回答
4107 浏览

objective-c - forwardInvocation: 如何被调用?

只看 Objective-C 运行时库,当一个消息被发送到一个不响应它的对象时,运行时系统给了接收者另一个机会来处理这个消息。因此,接收者的forward::方法(如果已实现)将被调用。但是,查看NSObject.mmNSObject似乎没有实现forward::

那么,如何调用NSObject'sforwardInvocation:方法,因为运行时系统在需要转发时唯一调用的是forward::?Foundation 是否使用objc_setForwardHandler( runtime.h ) 设置一个新的处理程序,该处理程序在需要转发forwardInvocation:发送到对象的消息时调用?NSObject

0 投票
2 回答
999 浏览

ios - @selector 的多个参数

我正在目标 C 中创建一个游戏,但我被一个问题阻止了:我有一个警告要在 @selector 上传递多个变量。我想要做的是在我的 UIViewController 中调用一个方法,但要延迟一段时间。所以我尝试制作第一个方法,在延迟后调用另一个方法,如下所示:

但它不起作用,我不知道为什么。

谢谢你的帮助 !

0 投票
1 回答
386 浏览

objective-c - forwardInvocation 中的奇怪“僵尸”:+ getArgument:atIndex 方法

这是我的代码的一部分:

这是处理 userGetWithCustomOptions: 方法的部分:

问题是当我使用“选项”变量时 - 它工作正常,但是当使用直接值时 - 它失败,应用程序崩溃。使用 Profile 我发现该方法调用指向已释放的对象。

为什么会发生这种情况?没有其他代码可以提供帮助。

ViewController.m 代码:​​https://gist.github.com/AndrewShmig/5398546

DPVkontakteUserAccount.m:https ://gist.github.com/AndrewShmig/5398557

0 投票
2 回答
1586 浏览

objective-c - -[NSInvocation retainArguments] 是否复制块?

NSInvocation-retainArguments方法在您不NSInvocation立即运行但稍后执行时很有用;它保留对象参数,因此它们在此期间保持有效。

众所周知,块参数应该被复制而不是保留。我的问题是,-retainArguments当它是块类型时,是否知道复制而不是保留参数?文档并未表明它确实如此,但这似乎是一件简单而明智的事情。

更新: iOS 7 中的行为似乎发生了变化。我刚刚对此进行了测试,在 iOS 6.1 及之前的版本中,-retainArguments没有复制块类型的参数。在 iOS 7 及更高版本中,-retainArguments不会复制块类型的参数。的文档-retainArguments已更新为说它复制了块,但没有说明行为何时改变(这对于支持旧操作系统的人来说真的很危险)。

0 投票
2 回答
1399 浏览

iphone - NSInvocation 的意外异常

以下代码引发异常。

vcClass是一个 Class对象(继承自UIViewController)。Self包含的实现viewWillAppear:

带消息:

由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“-[NSInvocation setArgument:atIndex:]: index (1) out of bounds [-1, -1]

附加信息:iOS5、ARC。 有人可以解释我怎么了?

更新:

此代码代码给我响应消息。所以我的类对象是正确的 [vcClass instancesRespondToSelector:viewWillAppearSEL] 吗?NSLog(@"响应") : NSLog(@"不响应");

我也马上崩溃了[invocation setSelector:viewWillAppearSEL];。这就是为什么我用 NSInvocation 将主题标题称为Unexpected 异常

更新2:

还有的实施viewWillAppear:

0 投票
1 回答
2153 浏览

iphone - 如何使用 NSInvocation 调用类方法?

我有一个类方法,它没有在 h 文件中声明,但在 m 文件中实现。现在我想在另一个类中调用它,由于返回值是一个int,我不能直接使用选择器,所以我使用NSInvocation。

以下是我正在做的事情:

调用不成功,为什么?