问题标签 [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 投票
1 回答
625 浏览

objective-c - 如何将数组传递给需要 var args 的 objc 方法(例如 ...')

我在库中有一个方法,如下所示:

我真的很想用数组而不是 var args 来调用它,因为我想传入的对象数量是可变的。

是否有某种方法,使用 performSelector 或 NSInvocation 或 objc_msgSend 或其他什么,我可以调用 var args 方法,参数来自数组?

0 投票
0 回答
1642 浏览

objective-c - NSInvocation getArgument:atIndex: 使用 OCMock 测试块时出现混淆

我正在为我的 Facebook SDK 包装器编写单元测试,- (void)getArgument:(void *)buffer atIndex:(NSInteger)index在尝试使用 OCMock 模拟 FBRequest 时,有些事情让我对 NSInvocation 感到困惑。

这是我要测试的方法定义。

其中 FacebookHelperCompletionHandler 是一个 typedef,如下所示:

这是我的测试方法

当我在 NSInvocation 方法中将 3 作为索引传递时,我收到一条错误消息,指出索引 3 超出范围。但是文档说索引 0 是 self,1 是 _cmd,所以我相信 installedOnly 应该是 2,completionHandler 应该是 3。我玩过它,将 2 传递给 index 让我得到了我想要的完成处理程序和测试工作。我只是想了解为什么这些索引工作错误(可能是原始类型的东西?)

编辑:当然,愚蠢的我......我在嘲笑 FBRequest 的- (FBRequestConnection*)startWithCompletionHandler:(FBRequestHandler)handler方法,其中处理程序位于索引 2 处。我留下这个问题,以防将来有人需要使用 OCMock 进行块存根。`

0 投票
1 回答
258 浏览

objective-c - NSTimer 从不触发

我一直在让 NSTimer 触发时遇到问题,我认为它必须与多线程问题有关。为了确保我正确地创建了计时器,我创建了以下测试代码并将其放入我的主视图控制器的 initWithNibName 中。令我惊讶的是,它也没有在那里开火。

关于这段代码有什么问题的任何线索?它似乎完全按照文档指定的将 NSInvocation 与 NSTimer 一起使用。

0 投票
1 回答
1307 浏览

ios - IOS NSMethodSignature 保持为零

我最近开始为 IOS 开发并与调用对象作斗争。

我拥有的是一个从 NSManagedObject 派生的“位置”类(它是 Coredata 模型的一部分)

我还有其他具有类似签名的类(addHasWorkorderInfoObject,...)。

在这种情况下,这些 InfoObject 对其“父对象”有约束,“Location”有几个“LocationInfo”对象,我从数据库中检索并希望添加到 Location 中。同样的事情应该发生在所有分配了 InfoObjects 的对象上。

我现在正在尝试创建一种方法,该方法适用于任何遵守项目文档(位置 - > addHasLocationInfoObject,XY - > addHasXYInfoObject ...)固定的命名约定的对象。

我现在向对象添加信息的方法是:

然而,这给了我一个错误,因为 Signature 对象被设置为 nil。我尝试搜索问题,它似乎与选择器名称中的“:”有关。

但我不明白有多少、在哪里以及为什么我必须设置这些?我似乎也找不到告诉我如何正确执行此操作的文档页面。

任何帮助表示赞赏,在此先感谢!

PS。我记录了 SelectorName 和 Classname,它们都拼写正确。

0 投票
1 回答
184 浏览

objective-c - 向上传递堆栈时 CGRect 被破坏

我在一个函数中有这 4 行代码

基本上,我从 an 获取返回值NSInvocation并将返回值放在 aRect 的内存地址(即,AFAIK,应该在堆栈上)。返回值显然是一个CGRect。someFunction() 返回一个指向“任何东西”的指针。返回值可以是指向 int 的指针、指向 float 的指针或指向对象的指针。
所有提到的类型都正确返回,但我对 CGRect 有问题。

调试,aRect 设置正确后getReturnValue:

问题是当我返回时(代码与其他类型相同,int、long 或 object)

结果应该进入returnedRect,但再次调试,CGRect的值已损坏:

如您所见,内存地址是相同的,因此 rect 似乎已损坏。

如果我像这样更改第一个功能:

rect 正确传递而没有损坏。发生这种情况是因为,在这种情况下,我已经在堆上分配了结构

但是为什么在堆栈上设置它不起作用?对于 int、float、long 和 double,相同的代码可以正常工作。我错过了什么?

最后一点:我正在使用 ARC

谢谢

0 投票
1 回答
542 浏览

ios - 在我的应用程序中发现了一个 NSZombie……现在怎么办?

我有一个 NSManagedObject 的子类,其中包含一些真正是枚举的“整数 32”属性。这些枚举在我的模型的 .h 文件中定义,如下所示:

我需要显示一个表格视图来显示此自定义对象的每个属性的值,因此对于每个枚举,我都有一个看起来像这样的方法来返回字符串值:

在我的表格视图中,我遍历了我的属性NSManagedObject(使用NSEntityDescription'sattributesByName并且对于每个属性,我调用一个辅助方法,该方法调用适当的“stringsFor”方法来返回该特定属性的字符串:

我的表格视图cellForRowAtIndexPath如下所示:

NSInvocation仅对于其中一个属性,我一直在返回数组上崩溃:

使用 Zombies Profiler,我看到:

仪器截图

我正在使用 ARC。我该如何进一步调试呢?

0 投票
2 回答
473 浏览

iphone - NSInvocation 需要 NSMethodSignature

这几天我一直在想是否NSInvocation需要NSMethodSignature. 假设我们想编写自己的 NSInvocation,我的要求是这样的:

  1. 我需要一个选择器SEL
  2. 调用选择器的目标对象
  3. 参数数组

然后我会IMP从目标和 中取出SEL,并传递argumentas 参数。

所以,我的问题是,为什么我们需要一个NSMethodSignature来构造和使用一个NSInvocation

注意:我知道只有 aSEL和一个目标,我们没有这个方法的参数和返回类型,但是我们为什么要关心 args 和返回的类型呢?

0 投票
4 回答
2408 浏览

ios - -[NSInvocation getReturnValue:] 具有双值,意外产生 0

我正在尝试调用一个返回doubleusing的方法NSInvocation。但我发现它不适用于 64 位 iOS 应用程序。它适用于 OS X、模拟器——32 位和 64 位——iPad 2 和 32 位版本的 iPad Air。只有 iPad Air 设备上的 64 位版本存在此问题。

这是演示问题的代码:

预期产出

iPad Air 上 64 位版本的输出

这也是为了float价值而发生的。

0 投票
1 回答
1639 浏览

objective-c - 为什么这个 NSInvocation 会引发异常?

我现在真的很头疼。所以,一个NSTimer物体,一个NSMethodSignature物体,一个NSInvocation物体走进酒吧。这是笑话的其余部分:

这是我在调试控制台中得到的:

编辑:我不确定为什么有人认为有必要对我的问题投反对票。很抱歉尝试学习新东西。实际上,这是对我最初的问题的修正:我应该做些什么不同的事情?一旦我弄清楚我的问题是什么,我应该删除帖子吗?我试图遵循 Stack Overflow 的所有礼仪,我什至花时间留下一个答案,以免它可以帮助别人。下次,我是否应该回到我的问题并留下诸如“nvm ......想通了。thx”之类的回答?还是我应该把它留在这里,无人回答?我肯定知道我已经厌倦了点击链接却被引导到未答复的帖子。

0 投票
2 回答
741 浏览

ios - NSTimer + NSInvocation 导致 iOS 7 崩溃

在 iOS 7 上使用时我遇到了崩溃+[NSTimer scheduledTimerWithTimeInterval:invocation:repeats]。代码很简单;这是完整的复制粘贴(带有变量重命名)。

当计时器触发时,我的应用程序崩溃并显示以下堆栈跟踪:

在此处输入图像描述

我认为可能其中一个变量不再保留(尽管 NSTimer 的文档提到它保留了所有引用的参数),所以我强烈将所有变量保留到self. 不幸的是,崩溃仍然存在。

提前致谢!