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

objective-c - 用两个参数在主线程上执行选择器的好方法?

我正在寻找一种在主线程上使用两个参数执行选择器的好方法

我真的很喜欢使用

方法,除了现在我有两个参数。

所以基本上我有一个委托,我需要在加载图像时通知它:

但是我这样做的方法可能会在后台线程中调用,并且委托将使用此图像来更新 UI,所以这需要在主线程中完成。所以我真的希望委托也能在主线程中得到通知。

所以我看到了一个选项——我可以创建一个字典,这样我只有一个对象,其中包含我需要传递的两个参数。

但这种方法对我来说似乎不合适。有没有更优雅的方法来做到这一点?也许使用 NSInvocation?提前致谢。

0 投票
2 回答
3749 浏览

cocoa - NSInvocation 和 ARC(自动引用计数)

在尝试将我当前的代码迁移到 ARC 时,每当我将 NSString 作为 NSInvocation 参数传递时,都会出现错误。

例子:

当我使用 Edit 菜单中的 Refactor -> Convert to Objective-C ARC 选项时会发生错误。文本是“NSInvocation 的 setArgument 不能安全地与拥有 __unsafe_retained 以外的所有权的对象一起使用。”

我将如何解决这个问题?

0 投票
2 回答
1881 浏览

objective-c - 当前方法的 NSInvocation 的 getArgument 总是返回 null

我想获取我所在的当前函数的参数名称,以便如果当前实例上不存在该对象,我可以准备从文件系统加载该对象。(例如,如果 [foo dictTest] 不可用,我想将它之前保存的 plist 版本加载到该 ivar 中)

我想通过提供我作为参数提供给当前函数的 ivar 名称来查找文件。

这是功能代码:

一旦代码到达 NSLog,我就会从 firstArgument 获得一个空值。

这是为什么?有没有可能我必须等待我所在的当前方法的完整调用,或者创建一个代理函数实际上更好,该函数通过调用 setArgument 提供的 ivar 名称来隐式调用我的类方法,这样我可以像我想要的那样使用那个参数字符串吗?

提前非常感谢!

PS:在这个特定的示例中,我不想使用 KVC 来识别 ivar 并返回它。

0 投票
3 回答
528 浏览

iphone - NSInvocation 将 C 数组传递给 Objective-C 方法

我想在延迟后将 C 数组传递给 Objective-C 中的方法。通常我可以执行Selector:withObject:afterDelay,但我不能以任何方式更改数组或将它们转换为 NSMutableArrays、NSDictionaries 或任何其他 Cocoa 对象——它们必须是 C 数组。在我对 StackOverflow 和 Google 的研究中,我发现传递 C 原语的一种方法是将它们包装在 NSInvocation 中。我尝试使用下面的代码执行此操作,并将参数设置为指向正在传递的数组的指针。

当我尝试在下面的方法中从传递的数组中打印一些值时,我的测试应用程序不断崩溃。我可能只是错过了一些完全明显的东西。有人可以在这里阐明一下吗?

0 投票
3 回答
20069 浏览

objective-c - 使用 NSOperation 的异步 NSURLConnection

我想NSURLConnection 在后台模式下做,因为它的响应有很多数据。论坛告诉使用 Apple 的有限长度编码在didEnterBackground. 但我想避免它。而不是它,我通过 as 使用以下代码NSOperationNSInvocation但它不起作用。connectToServer正在NSURLConnection手术中。有什么帮助吗?didReceiveDatadidReceiveResponse委托方法不被调用?

0 投票
3 回答
1401 浏览

objective-c - NSOperation 中的异步 NSURLConnection 与 NSInvocation?

我必须在后台模式下在 NSOPeration 中使用 Asynchrnous NSURLConnection,因为它的响应有大数据我必须避免在 didEnterBackground 中使用 Apple 的有限长度编码。而不是它,我通过 NSOperation 使用以下代码和 NSInvocation 作为,但它不起作用。 connectToServer 正在进行 NSURLConnection 操作。请问有什么帮助吗?didReceiveData,didReceiveResponse 委托方法没有被调用吗?

}

}

0 投票
1 回答
327 浏览

objective-c - 返回后使用 NSOperationQueue 延迟释放 malloc'd void*

NSInvocation用来获取一些方法返回,不幸的是我似乎有泄漏,但void*在我从NSInvocation.

在以下实现中,我尝试使用在下一个运行循环中执行的块来释放它,但由于returnBuffer未分配而导致崩溃。

为什么我不能returnBuffer在块中释放,如果它没有被分配,为什么它会通过returnBuffer!=NULL

这是一种与IMPswizzling 有关的特殊方法,所以我不知道方法返回类型。把它放进去NSData或什么都行不通。

答案 由于乔希的-[NSMutableData mutableBytes]技巧

0 投票
2 回答
709 浏览

objective-c - 将选择器名称作为方法参数传递

我正在编写一个自定义帮助方法,该方法会被大量使用并返回几个按钮。每个按钮在按下时当然会有自己的目标选择器,我想将选择器作为参数传递给此方法,以便返回的按钮具有指定的选择器。

但我不确定如何将选择器作为方法参数传递。像这样的东西:

其中selectedFunction是传递给方法的参数。

我尝试制作WhatClass?*NSString 和 SEL,但结果是:

[NSInvocation invocationWithMethodSignature:]:方法签名参数不能为nil

0 投票
2 回答
1272 浏览

objective-c - 如何从块内对主线程执行 UIKit 调用

我正在尝试从回调块内部推送视图控制器。我要推送的视图控制器包含一个 UIWebView,它抱怨我应该在主线程上调用它。我尝试使用 NSInvocation 无济于事。如何调用presentModalViewController:animated主线程?

错误信息:

bool _WebTryThreadLock(bool), 0x6b21090: 试图从除主线程或web线程之外的线程获取web lock。这可能是从辅助线程调用 UIKit 的结果。现在崩溃...

我正在使用类别NSInvocation+CWVariableArguments

0 投票
3 回答
1089 浏览

objective-c - NSInvocation 和 block 有什么区别?

当我说阻止时,我的意思是:

此外,block 仅适用于 iOS4 及以上版本。

这两者有什么区别?