SEL 执行选择器和参数

2023-11-23

当您拥有的只是一个 SEL 对象时,似乎应该有一种简单的方法来调用带有一些参数的选择器。我似乎找不到正确的语法。

-(MyClass*) init: (SEL)sel owner:(NSObject*) parent
{
   int i =10;
   [parent performSelector:sel:i  ];
}

看看NSObject文档。在这种情况下:

[parent performSelector:sel withObject:[NSNumber numberWithInt:i]];

(注意这个方法实际上列在NSObject协议文档)。自从-[NSObject performSelector:withObject:]需要一个对象参数,您必须在父类中编写一个包装器,例如

-(void)myMethodForNumber:(NSNumber*)number {
    [self myMethod:[number intValue]];
}

拆箱NSNumber.

如果您确实想调用直接采用非对象参数的方法(例如,您无法控制被调用者源并且不想添加类别),则可以使用NSInvocation:

NSInvocation *inv = [NSInvocation invocationWithMethodSignature:[parent methodSignatureForSelector:sel]];
[inv setSelector:sel];
[inv setTarget:parent];
[inv setArgument:&i atIndex:2]; //arguments 0 and 1 are self and _cmd respectively, automatically set by NSInvocation
[inv invoke];

顺便说一句,你的方法看起来像init方法,但不遵循 Objective-C 的正确初始化程序模式。您需要调用超类初始值设定项,并且需要测试nil该调用的结果,您必须从初始化方法返回 self。在所有情况下,您的 Objective-C 初始化方法应该如下所示:

-(id)myInitMethod {
    self = [super init];
    if(self != nil) {
      //perform initialization of self
    }

    return self;
}

您的方法(如果它是 init 方法)将如下所示:

-(id) init: (SEL)sel owner:(NSObject*) parent
{
   self = [super init];
   if(self != nil) {
       int i = 10;
       NSInvocation *inv = [NSInvocation invocationWithMethodSignature:[parent methodSignatureForSelector:sel]];
       [inv setSelector:sel];
       [inv setTarget:parent];
       [inv setArgument:&i atIndex:2]; //arguments 0 and 1 are self and _cmd respectively, automatically set by NSInvocation
       [inv invoke];
   }

    return self;
}

为了在风格上更加 Objective-C,我将重命名初始化程序-(id)initWithSelector:owner:以及。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SEL 执行选择器和参数 的相关文章

  • 如何建立辅助NSSortDescriptor排序键?

    我已成功按排序键对数据进行排序lastName 但我想知道如何排序lastName 然后由firstName 这是我用来排序的代码lastName NSSortDescriptor sortDescriptor NSSortDescript
  • 最近打开的应用程序[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 有什么方法可以获取最近打开的应用程序 例如 4 个 的列表吗 如果是这样 怎么办 可可麦克 看看LaunchServices LSSh
  • 将第 3 方库 ZXing 导入 Xcode

    我尝试了多种方法将第 3 方库 ZXing 导入我的 iOS 应用程序 但所有方法都很痛苦 或者根本不起作用 如果有人可以建议我做错了什么 或者提出导入 ZXing 等库的更好方法 我将非常感激 一定比这个容易 这就是我所做的 结果是 My
  • iPhone 中的 NSNotification

    我正在将 NSSNotifcation 发送到 iPhone 应用程序中的另一个视图控制器 但它的观察者方法收到两次通知 这可能如何 任何人都可以指导我 我已经使用此代码来发布通知 NSNotificationCenter defaultC
  • 您是否标记 UIView 或将它们保留为属性?

    这主要是一个风格问题 但自从我开始为 iPhone 编程以来 我一直很好奇其他人的想法是什么 当您的 iPhone 应用程序中有一个 UIView 并且需要在应用程序的其他位置访问它时 通常在视图控制器中的另一个函数中 您是否喜欢用整数标记
  • 是否有适用于 iPad 2 的条码扫描仪 SDK? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 使用 iOS 8 自定义键盘发送图像?

    我一直在为 iOS 8 开发自定义键盘 但在尝试使用键盘发送图像时偶然发现了一个问题 我做了一些研究 似乎没有一种简单的方法可以做到这一点UITextDocumentProxy因为只有NSStrings被允许 我是否忽略了使用自定义键盘发送
  • NSString – 静态还是内联?有性能提升吗?

    如果我写的话会有任何性能提升吗 NSString helloStringWithName NSString name static NSString formatString Hello return NSString stringWith
  • 如何在 iOS 9 上可靠地检测是否连接了外部键盘?

    在 iOS 9 之前 确定是否连接外部键盘的最可靠方法是监听UIKeyboardWillShowNotification并使文本字段成为第一响应者 如中所述这个问题 https stackoverflow com questions 289
  • 是否可以使用 Firebase 安排推送通知? [复制]

    这个问题在这里已经有答案了 我已经阅读了我能找到的所有文档 但仍然不知道这是否可行 如果我是用户 我可以安排特定时间的推送通知吗 Example 1 我是用户并打开应用程序 2 我允许通知并转到 pickerView 或其他任何内容 并设置
  • 在 XCode 中链接静态 ObjC 库的过程

    我正在尝试链接到静态库 但不断收到链接器错误 我发现了一些发布示例的网站 但我无法看到我做错了什么 首先 我创建一个链接到我的库的项目 添加 gt 现有文件找到我的 xcodeproj 文件选择 将项目复制到目标组文件夹 选择我的宿主项目作
  • 将 SSLSetEnabledCiphers 与 AFNetworking 结合使用来禁用弱密码

    我正在尝试禁用一些密码 弱 例如单个 DES 单个 DES 40 位等 我尝试过使用这段代码在 Cocoa 中使用 CFSocket CFStream 时如何设置 SSL 密码 https stackoverflow com questio
  • 如何使用 Swift 使用 TouchID?

    Apple 为 iOS 8 的 TouchID 实现提供的文档采用 Objective C 语言 有 Swift 版本吗 Objective C IBAction touchIDAvailable UIButton touchIDAvail
  • 以编程方式使用 Stack Overflow 进行身份验证

    我想在我的 iPhone 应用程序中添加赞成和反对投票 MyStacks http itunes apple com gb app mystacks id360030953 mt 8 为此 我需要能够使用 Stack Overflow 对用
  • 用于选择特定 div 中具有特定类的锚元素的 jQuery 选择器是什么

    我有一些这样的代码 我想选择每个 a 带有类的标签status在 div 中foo div a class status a div 你可以这样做 foo find status a
  • insertNewObjectForEntityForName:

    我使用 Xcode xcdatamodel 文件编辑器设置了一个实体 我创建了一个名为 Person 的实体 添加了一些属性 然后生成了一个 m 文件来表示它 一切都很好 现在 当我去编写一行代码时 例如 Person person Per
  • 水平 UICollectionView 单行布局

    我正在尝试使用以下命令设置简单的水平布局UICollectionView 兜圈子却没有达到预期的结果 所以任何指针或例子将不胜感激 我粘贴经常更改的代码但没有成功可能没什么意义 该图像显示两行 第一行是单个项目 尺寸正确并且在中心正确对齐
  • 如何阻止 UITableView moveRowAt IndexPath 在重新排序时留下空白行

    我遇到一个问题 在重新排序 UITableViewCells 时 tableView 不随单元格滚动 仅出现一个空白行 任何后续滚动都会出现数组越界错误 堆栈跟踪中没有我的任何代码 这是该问题的快速视频 http www screencas
  • UIView晃动动画

    我试图在按下按钮时使 UIView 摇动 我正在调整我找到的代码http www cimgf com 2008 02 27 core animation tutorial window shake effect http www cimgf
  • 在发生更改事件时将货币格式重新应用到 UITextField

    我正在使用一个包含本地化货币值的 UITextField 我看过很多关于如何使用此功能的帖子 但我的问题是 如何在每次按键后将货币格式重新应用到 UITextField 我知道我可以通过以下方式设置和使用货币格式化程序 NSNumberFo

随机推荐

  • 如何设置ViewBox背景?

    我需要设置我的背景System Windows Controls Viewbox 但该属性丢失了 我该如何解决这个问题 将视图框放入支持背景属性的控件中
  • 如何获取PHP中复制函数的进度状态?

    我需要知道如何获取状态copy PHP 中的函数 我正在使用此功能下载远程文件 并且我想要该程序的进度条 您需要编写自己的复制功能 首先通过 HTTP HEAD 请求检查文件大小 例如使用以下解决方案 http php net manual
  • 将方法传递给 LINQ 查询

    在我目前正在处理的一个项目中 我们有许多静态表达式 当我们调用它们的 Invoke 方法并将 lambda 表达式的参数传递给它们时 我们必须将它们带入本地作用域 今天 我们声明了一个静态方法 其参数正是查询所期望的类型 因此 我和我的同事
  • NHibernate 中是否需要代理工厂?

    我在 hibernate cfg xml 中有这样的配置
  • 使用 HTML5 进行移动开发(iphone、android)的资源和框架 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心以获得指导 我正在寻找主要为 iPho
  • 用 c 封装一个 c++ 库? (不要“外部c”)

    是否可以将 C 库包装到 C 中 我怎样才能做到这一点 有现成的工具吗 需要访问现有的 C 库 但只能使用 C 您可以用 C 语言编写面向对象的代码 因此如果它是面向对象的 C 库 则可以将其包装在 C 接口中 然而 这样做可能非常乏味 特
  • spring-security中基于路径变量的授权

    我的用例是根据 PathVariable 参数对用户进行身份验证和授权 我需要执行一些自定义代码来授权主体 我不确定这里要采取的方法 我已经实现了一个自定义的 AbstractAuthenticationProcessingFilter 和
  • 如何使用 RDD API 在分区内排序(并避免跨分区排序)?

    Hadoop MapReduce shuffle 的默认行为是对分区内的 shuffle key 进行排序 而不是跨分区 这是使键跨分区排序的总排序 我想问如何使用 Spark RDD 实现同样的事情 在分区内排序 但不跨分区排序 RDD
  • “堆内”和“堆外”的区别

    Ehcache 谈论堆内和堆外内存 有什么不同 使用哪些 JVM 参数来配置它们 堆上存储是指将出现在 Java 堆中 并且也受 GC 影响 的对象 另一方面 堆外存储是指由 EHCache 管理的 序列化 对象 但存储在堆外 并且也不受
  • 在 iPhone 中创建 pdf 缩略图

    我是 Objective c iPhone 编程新手 我有一个应用程序 可以在 UIWebView 中成功显示 PDF 但现在我想创建 PDF 的缩略图 我的 PDF 存储在我的资源文件夹中 因此 请给我如何显示 PDF 缩略图的代码 我的
  • 绘制立方体时出现OutOfMemory异常

    我有一个绘制和旋转立方体的类 每次旋转立方体时 我都会使用立方体的新值重新加载缓冲区 public void LoadBuffer GraphicsDevice graphicsDevice buffer new VertexBuffer
  • 如何使用 Android Management API + Organizations 分发私有 Android 应用测试轨道?

    因此 我使用 Android Management API 来管理和处理应用程序到我正在使用的信息亭设备的部署 我创建了一个组织 创建了一项政策 并确保该应用程序仅限于托管的 Google Play 并将该组织分配给该应用程序 我已将一些设
  • 如何查看c中优化后的代码

    我可以使用探查器检查优化情况 可执行文件的大小以及执行所需的时间 我可以得到优化的结果 但我有这些疑问 如何获得优化的 C 代码 C 使用哪种算法或方法来优化代码 提前致谢 您可以使用该选项了解优化的想法 fdump tree optimi
  • 是否可以使用 Google Chrome 作为代理服务器?

    在我的特定网络环境中 Google Chrome 可执行文件可以通过经过身份验证的传出代理服务器访问外部网站 然而 其他可执行文件 当指向该传出代理时 无法执行此操作 我现在有一个想法 使用 Chrome 本身作为其他可执行文件的本地代理
  • 在 Oracle 中为 varchar2 字段创建序列

    我想为这个 varchar 创建一个序列 如果它是一个数字而不是 varchar 那就更容易了 在那种情况下 我可以做 seq no seq no 1 但是 当我想将列中的下一个值存储为 A0000002 而前一个值是 A0000001 将
  • 避免 SSL “您将被重定向到不安全的连接。”信息

    我有一个通过 SSL 提供服务的登录屏幕 用户填写他们的登录名 密码 这将被发布到服务器 此时我想跳出 SSL 因此我将它们重定向回没有 SSL 的同一页面 这会导致浏览器显示警告对话框 您将被重定向到不安全的连接 我怎样才能避免这种情况
  • 如何在 Yii 中使用事件

    我想在 onBeginRequest 事件中运行一些代码 我该在哪里做呢 我认为我不应该将其添加到核心库代码中 我对 Yii 完全是菜鸟 如果您想使用 onBeginRequest 和 onEndRequest 您可以通过将以下几行添加到配
  • VS 2010 中出现“没有可用的编辑器”错误

    当我尝试在 VS 2010 中选择设计器视图时 出现以下错误 没有可用的编辑器 c 用户 teadrinkinggeek 文档 视觉 工作室 2010 网站 website2 About aspx 确保该文件的应用程序 类型 aspx 已安
  • 为什么 Eclipse PHP 无法识别名称空间声明?

    当我输入 namespace ORM 时在 Eclipse 中 它用红色强调 ORM 并表示它需要括号 有没有办法让 Eclipse 识别名称空间 这可能是您的项目设置为5 1 5 2版本 您可以在以下位置更改默认值 Window gt P
  • SEL 执行选择器和参数

    当您拥有的只是一个 SEL 对象时 似乎应该有一种简单的方法来调用带有一些参数的选择器 我似乎找不到正确的语法 MyClass init SEL sel owner NSObject parent int i 10 parent perfo