首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

将@objc方法作为操作添加到按钮并获取“'#selector‘的参数不引用'@objc’方法、属性或初始值设定项”

将@objc方法作为操作添加到按钮并获取“'#selector'的参数不引用'@objc’方法、属性或初始值设定项”是一个编程中常见的错误提示。这个错误通常发生在使用Objective-C的语法和特性时,而编译器无法正确识别和处理。

首先,@objc是Objective-C的一个修饰符,用于将Swift中的方法、属性或类暴露给Objective-C代码。在Swift中,我们可以使用@objc修饰符来声明一个方法或属性,以便在Objective-C中使用。

当我们尝试将一个使用了@objc修饰符的方法作为操作添加到按钮时,我们需要使用#selector来引用这个方法。然而,编译器会在这种情况下发出警告或错误,提示我们参数不引用@objc方法、属性或初始化项。

这个错误通常是由于以下几种情况引起的:

  1. 方法名错误:请确保使用正确的方法名来引用@objc方法。方法名是区分大小写的,所以请确保大小写匹配。
  2. 方法不是@objc方法:请确保要添加到按钮的方法使用了@objc修饰符。如果方法没有使用@objc修饰符,编译器将无法正确识别和引用该方法。
  3. 方法不可见:请确保要添加到按钮的方法在当前作用域中可见。如果方法是私有的或在其他模块中不可见,编译器将无法引用该方法。
  4. 方法签名错误:请确保方法的参数和返回类型与按钮操作的期望相匹配。如果方法签名不匹配,编译器将无法正确引用该方法。

解决这个问题的方法包括:

  1. 确保方法使用了@objc修饰符,并且在当前作用域中可见。
  2. 检查方法名的拼写和大小写,确保与引用时一致。
  3. 检查方法的参数和返回类型,确保与按钮操作的期望相匹配。

如果以上方法都没有解决问题,可能需要进一步检查代码逻辑和上下文,以确定是否存在其他问题。

对于这个问题,腾讯云没有特定的产品或链接来解决,因为它是一个与云计算无关的编程错误。然而,腾讯云提供了丰富的云计算产品和服务,可以帮助开发人员构建和部署各种应用程序。您可以访问腾讯云官方网站(https://cloud.tencent.com/)了解更多信息。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

iOS开发·runtime原理与实践: 关联对象篇(Associated Object)(应用场景:为分类添加“属性”,为UI控件关联事件Block体,为了不重复获得某种数据)

本文中,第一节介绍关联对象及如何关联对象,第二节介绍关联对象最常用一个实战场景:为分类添加属性,第三节介绍关联对象另一个很重要实战场景:为UI控件(比如,UIAlertView以及UIButton...alertView参数据此选用相应逻辑。...创建完警告视图之后,设定一个与之关联“块”(block),等到执行delegate方法时再将其读出来。下面对此方案进行改进。...有没有办法让方法只执行一次,每次调用方法时候直接获得那一次执行结果?有的,方案就是让某个对象方法获得数据结果作为属性”与这个对象进行关联。...获取`类`属性 /** 参数 1> 类 2> 属性计数指针 */ unsigned int count = 0; // 返回值是所有属性数组

2.8K20

iOS开发·runtime原理与实践: 基本知识篇(类,超类,元类,super_class,isa,对象,方法,SEL,IMP)

( Method m ); // 获取方法返回值类型字符串 char * method_copyReturnType ( Method m ); // 获取方法指定位置参数类型字符串 char...m ); // 通过引用返回方法指定位置参数类型字符串 void method_getArgumentType ( Method m, unsigned int index, char *dst,...struct objc_selector *SEL; 在源码中没有直接找到 objc_selector 定义,从一些书籍上与 Blog 上看到可以 SEL 理解为一个 char* 指针。...操作函数 // 返回给定选择器指定方法名称 const char * sel_getName ( SEL sel ); // 在Objective-C Runtime系统中注册一个方法方法名映射到一个选择器...指向方法selector指针与该字段做一个AND位操作(index = (mask & selector))。这可以作为一个简单hash散列算法。

1.7K40
  • Objective-C Runtime:深入理解类与对象

    其实最主要表现就是Objective-C很多静态语言在编译和链接时做事情放到了运行时去做,它在运行时实现了对类、方法、成员变量、属性等信息管理机制。...类操作方法大部分是以class_ 为前缀,而对象操作方法大部分是以objc_object_为前缀,具体以分类形式进行讨论。...2、属性相关操作函数: // 获取指定属性 objc_property_t class_getProperty ( Class cls, const char *name ); // 获取属性列表...函数:销毁一个类实例,但不会释放移除任何与其相关引用; 实例操作函数 实例操作函数主要是针对我们创建实例对象一系列操作函数。...类B通过添加一些额外属性来扩展类A。现在我们创建了一个A类实例对象,希望在运行时这个对象转换为B类实例对象,这样可以添加数据到B类属性中。

    1.3K40

    NSObject头文件解析 消息机制 Runtime解读 (一)

    Class类作为成员变量, 稍后我们再具体看看Class头文件 } //load & initilize方法我们不常用到, 进一步说明大家可以看下这个地址:http://www.cocoachina.com...标记属性是Ojective-C 2.0不支持,但实际上可以用响应函数获取这些属性,具体有哪些响应函数大家可以导入后输入class_get...看看 例如:如果想要获取...(也可以还带有参数), 对象接收到消息后会先在cache中找之前调用记录, 在调用记录中找到了该方法就直接运行, 找不到就去方法列表去找 还找不到就去父类去找 如果找到顶层还是没有, 一般情况下在我们没有进行任何操作时候会...crash 如果要对没有实现方法调用做一些操作, 就可以在动态解析/重定向/消息转发中来做处理, 在其中任何一个阶段有处理该方法调用就不会crash 更详细用法之前讲过, 请看: http://www.cnblogs.com...72477] 打印成员变量初始值: (null) 2017-02-02 11:41:28.161 RunTimeDemo[1271:72477] 打印修改后成员变量值: nihao 获取实例方法: Method

    1.3K31

    2020-iOS最新面试题解析—1(原理篇)

    ,那么可以执行比较耗时操作; 如果在主线程发通知,那么就不可以执行比较耗时操作 runtime 如何实现 weak 属性 首先要搞清楚weak属性特点 weak策略表明该属性定义了一种“非拥有关系...为这种属性设置新值时,设置方法既不保留新值,也释放旧值。...用 weak 指向对象内存地址作为 key,当此对象引用计数为0时候会调用对象 dealloc 方法, 假设 weak 指向对象内存地址是a,那么就会以a为key,在这个 weak hash表中搜索...函数第一个参数self * 第二个成员是记录当前类父类是什么,告诉程序从父类中开始找方法,找到方法后,最后内部是使用 objc_msgSend(objc_super->receiver, @selector...以及参数类型,其实selector本质就是方法名称,通过这个方法名称就可以在方法列表中找到对应方法实现.

    1.7K21

    Objective-C Runtime 详解

    PS:任性的话可以在Category中添加@dynamic属性利用运行期动态提供存取方法干脆动态转发;或者干脆使用关联度对象(AssociatedObject) 其中objc_ivar_list...但此时获取属性名是不带下划线,得到属性或者变量名后我们就可以使用KVC去修改访问类中私有属性变量。所以OC中没有真正意义上私有变量,私有方法也是。...我们可以实现forwardInvocation:方法来对不能处理消息做一些默认处理,也可以消息转发给其他对象来处理,而抛出错误。...( id object ); 这些方法以键值对形式动态地向对象添加、获取删除关联值。...dispatch_once 是GCD中一次性方法,它保证了代码块只执行一次,让其为一个原子操作,线程安全是很重要

    1.2K20

    Objective-C对象引用

    您可能想要引用一个对象而不妨碍对象本身回收。对于这种情况,您可以获取一个“弱”引用。弱引用是通过存储一个指向对象指针创建,而不是保留对象。...强引用(持有对象Retain):当前对象被其他对象引用时,会执行retain操作引用计数器+1。...二、循环引用 对象 A 和对象 B,相互引用了对方作为自己成员变量,只有当自己销毁时,才会将成员变量引用计数减 1。...不会在属性清空后引用指针清空,这会造成野指针,所以是由风险去访问一个已经被清除对象。...但是我们可以用另外一种方法来关联一个weak属性,那就是强关联一个对象,然后让这个对象来弱引用这个属性

    83620

    Objective-C Runtime详解

    PS:任性的话可以在Category中添加@dynamic属性利用运行期动态提供存取方法干脆动态转发;或者干脆使用关联度对象(AssociatedObject) 其中objc_ivar_list...但此时获取属性名是不带下划线,得到属性或者变量名后我们就可以使用KVC去修改访问类中私有属性变量。所以OC中没有真正意义上私有变量,私有方法也是。...我们可以实现forwardInvocation:方法来对不能处理消息做一些默认处理,也可以消息转发给其他对象来处理,而抛出错误。...( id object ); 这些方法以键值对形式动态地向对象添加、获取删除关联值。...dispatch_once 是GCD中一次性方法,它保证了代码块只执行一次,让其为一个原子操作,线程安全是很重要

    1.7K60

    面经之《招聘一个靠谱iOS》import CYLBlockExecutor.himport CYLBlockExecutor.himport CYLNSObject+RunAtDeallo

    举个例子,假如 CYLUser 中含有一个数组,与其他 CYLUser 对象建立解除朋友关系那些方法都需要操作这个数组。那么在这种情况下,你得把这个包含朋友对象数组也一拷贝过来。...我们可以设计一个函数(伪代码)来表示上述机制: objc_storeWeak(&a, b)函数: objc_storeWeak函数把第二个参数--赋值对象(b)内存地址作为键值key,第一个参数--...下面分别介绍下方法内部实现: objc_initWeak函数实现是这样:在“附有weak修饰符变量(obj1)”初始化为0(nil)后,会将“赋值对象”(obj)作为参数,调用objc_storeWeak...函数0(nil)作为参数,调用objc_storeWeak函数。...... */ objc_storeWeak(&obj1, 0); objc_storeWeak 函数把第二个参数--赋值对象(obj)内存地址作为键值,第一个参数--weak修饰属性变量(obj1

    1K100

    神奇Runtime

    指针), 调用方法选标 SEL (方法名),以及不定个数方法参数返回一个id。...否则 4、寻找父类method list,依次往上寻找(会找到NSObject),直到找到selector,填充到缓存中,返回selector,否则 动态解析,这里动态添加方法 5、如果找到可以动态...,缓存,方法返回,否则 消息快速转发,这里消息分配给其他对象处理 6、消息转发机制执行前,Runtime 系统允许我们替换消息接收者为其他对象。...:消息,以创建NSInvocation对象作为参数; 若methodSignatureForSelector:无方法签名返回,则向当前对象发送doesNotRecognizeSelector:消息,程序抛出异常退出...通过这种方法来模拟生成属性,但是与对象还是有点区别,因为对象属性会编译器自动生成setter和getter方法,会默认给你生成一个以下划线开头成员变量,而category手动去生成setter和getter

    60920

    Swift编译之SIL(Swift Intermediate Language)

    witness_method:通过 Protocol Witness Table(PWT) 获取对应方法引用地址。 objc_method:获取 Objective-C 方法引用地址。...@方法名:某个方法名字。 @_hasStorage:存储属性。 @_hasInitialValue:属性初始值。 @owned:方法接收者负责销毁返回值。...,方法导出到Objective-C,启用动态派发 @objc dynamic func say() // 没有@objc标记普通方法 func doSomething()...:表示这个表达式是隐藏,即不对外部可见 // [transparent]:表示这个表达式是透明,即包含额外控制流操作 // @variable initialization expression...方法调用约定,其中@yield_once表示该方法会产生一次yield modify 方法通常用于实现属性写时拷贝,在获取属性时会执行一些操作,并在修改时生成一个拷贝 // @convention(

    28641

    深入浅出 Runtime(二):数据结构

    isa操作相关 弱引用相关 关联对象相关 内存管理相关 ... */ }; 2. objc_class Class指针用来指向一个 Objective-C...oldCapacity = capacity(); // ⚠️缓存扩容为原来两倍,如果是首次调用,设置缓存容量初始值为 4 uint32_t newCapacity = oldCapacity...,请查看: 深入浅出 Runtime(三):消息机制 3. isa 指针 isa指针用来维护对象和类之间关系,确保对象和类能够通过isa指针找到对应方法、实例变量、属性、协议等; 在 arm64...(返回值类型、参数类型) IMP imp; // 方法地址/实现 }; 4.1 SEL SEL 又称“选择器”,它是一个指向方法selector指针,代表方法/函数名; SEL 维护在一个全局...,把一个方法返回值类型、参数类型通过字符串形式描述; @encode()指令可以类型转换为 Type Encodings 字符串编码, 如@encode(int)=i; OC方法都有两个隐式参数

    79310

    iOS-RunTime,不再只是听说

    使用运行时,发送消息需要导入框架并且xcode5之后,苹果建议使用底层方法,如果想要使用运行时,需要关闭严格检查objc_msgSend调用,BuildSetting...(eat)); // 带参数 objc_msgSend(p, @selector(eat:),10); 类方法调用底层 // 本质是会将类名转化成类对象,初始化方法其实是在创建类对象。...实例方法[p eat];底层调用[p performSelector:@selector(eat)];方法,编译器在代码转化为objc_msgSend(p, @selector(eat)); 在objc_msgSend...每一个方法都默认带有两个隐式参数 self : 方法调用者 _cmd : 调用方法标号,可以写也可以写。...参数二:void * == id key : 属性名,根据key获取关联对象属性值,在objc_getAssociatedObject中通过次key获得属性返回。

    1.3K70

    iOS_Runtime是什么?原理?作用?怎么实现weak?使用

    就是在程序运行过程中,有一套C语言级别的API,它把代码从OC转换成C 2、原理: OC是基于C,添加了面向对象特性,很多静态语言在编译和链接时做事放到了runtime运行时来处理 C:函数调用在编译时就知道会调用哪个函数...OC:在编译时候并不知道,只在正在运行时才会根据函数名称找到对应函数 3、作用 获取属性方法、成员变量、协议(包括私有的) 给分类动态添加属性方法 字典转模型 拦截替换方法 实现NSCoding...当对象引用计数为0时会调用dealloc方法,此时会在weak表中搜索,所有weak对象置为nil。...Key:对象内存地址 — value:n个weak对象 5、使用 替换ViewController生命周期方法 解决获取索引、添加、删除元素越界crash问题 防止按钮重复暴力点击 全局更换控件初始效果...} // 还有些属性,没添加,详情见Demo `UILabel``Category`中拦截初始化方法设置font // UILabel+Swizzling.m + (void)load {

    37920

    iOS16 和 Xcode14 如何改进 App 大小和运行时性能

    其实可以看到这里几乎每一行都要一条指令来调用 objc_msgSend, 即使是对日期属性访问(属性 setter 方法)。...每个类都有一张方法列表来存储这个类方法列表,当调用 objc_msgSend 时,就会通过参数去这个对应对应方法列表中查找,先在cache 中查找,然后在方法列表中查找,如果当前类找不到,就往上找父类...在高代码层面(比如业务层面,应用层),当我们复制指向某个对象指针时,需要增加对象引用计数,让该对象保持活跃引用状态(copy方法就会做这个事)。...操作推迟到稍后某个时间方法。..., 我们返回一个立即被持有(retain) 临时变量(theWWDCDate),这让我们可以省略删除正在匹配 autorelease 和 retain 调用。

    3.9K30

    iOS运行时Runtime基础

    第一步:编译阶段 [receiver selector]方法被编译器转化,分为两种情况: 1.不带参数方法被编译为:objc_msgSend(receiver,selector) 2.带参数方法被编译为...ivars: ivars用于存放所有的成员变量和属性信息,属性存取方法都存放在methodLists中。 methodLists: methodLists用于存放对象所有成员方法。...获取不仅有实例变量还有属性: Ivar *ivarList = class_copyIvarList([self class], &count); for (int i= 0; i<count...,我们通过Runtime动态方法解析操作为其他添加方法实现,具体代码如下: //Person.h文件 @interface Person : NSObject //声明类方法,但未实现 + (void...所以我们可以重写这个方法:对不能处理消息做一些默认处理,也可以消息转发给其他对象来处理,而抛出错误。

    92530

    Objective-C Runtime编程指南(1)

    这意味着该语言不仅需要编译器,还需要运行时系统来执行编译代码。运行时系统作为Objective-C语言一种操作系统来使得Objective-C工作。...编译器会将一个下面的一个消息表达式 [receiver message] 转变成一个消息函数 objc_msgSend,这个函数接收者和消息中提到方法名称(即方法selector作为其两个主要参数...如果在那里找不到selectorobjc_msgSend跟随指向超类指针,尝试在其派发表中找到selector。...规避动态绑定唯一方法获取方法地址,直接调用它,就像它是一个函数一样。...Objective-C方法只是一个C函数,它至少需要两个参数self和_cmd。 您可以使用函数class_addMethod函数添加到类中。

    80620
    领券