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

无法识别的选择器已发送到实例swift。'NSInvalidArgumentException‘错误

在Swift中,NSInvalidArgumentException 是一个常见的错误,通常表示传递给某个方法的参数不符合预期。这个错误通常与选择器(selector)有关,选择器是一个指向方法的指针,用于在运行时动态调用方法。

以下是一些可能导致 NSInvalidArgumentException 错误的原因和解决方法:

1. 选择器名称错误

确保你传递的选择器名称是正确的,并且与目标方法匹配。

代码语言:javascript
复制
let selector = #selector(MyClass.myMethod)
if MyClass.responds(to: selector) {
    MyClass.perform(selector)
} else {
    print("Selector not found")
}

2. 方法签名不匹配

确保选择器指向的方法签名与实际方法的签名匹配。

代码语言:javascript
复制
class MyClass {
    @objc func myMethod() {
        print("Method called")
    }
}

let selector = #selector(MyClass.myMethod)
if MyClass.responds(to: selector) {
    MyClass.perform(selector)
} else {
    print("Selector not found")
}

3. 对象未正确初始化

确保你尝试调用方法的对象已经正确初始化。

代码语言:javascript
复制
let myObject = MyClass()
let selector = #selector(MyClass.myMethod)
if myObject.responds(to: selector) {
    myObject.perform(selector)
} else {
    print("Selector not found")
}

4. 使用 perform(_:with:) 时参数错误

如果你使用 perform(_:with:) 方法传递参数,确保参数类型和数量正确。

代码语言:javascript
复制
class MyClass {
    @objc func myMethod(with parameter: String) {
        print("Method called with \(parameter)")
    }
}

let myObject = MyClass()
let selector = #selector(MyClass.myMethod(with:))
if myObject.responds(to: selector) {
    myObject.perform(selector, with: "Hello")
} else {
    print("Selector not found")
}

5. 动态添加方法

如果你动态添加方法,确保方法实现正确。

代码语言:javascript
复制
extension MyClass {
    @objc dynamic func dynamicMethod() {
        print("Dynamic method called")
    }
}

let selector = #selector(MyClass.dynamicMethod)
if MyClass.responds(to: selector) {
    MyClass.perform(selector)
} else {
    print("Selector not found")
}

6. 检查框架版本

确保你使用的框架版本支持你所使用的方法和选择器。

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

相关·内容

汇编寄存器的规则

这是与之前显示的方法相同的屏幕截图,除了这次是在 iPhone 7 上的 ARM64 程序集中: 您现在可能无法区分这两种架构,但是您很快就会知道它们就像手背一样....由于您已经断点了 viewDidLoad,因此可以放心地假设 NSView 实例加载。 感兴趣的方法是 mouseUp:由 NSView 的父类 NSResponder 实现的选择器。...这意味着当 Swift 调用函数时,先前分配给选择器的 RSI 寄存器实际上就是函数的第二个参数。好了,足够的理论 - 是时候将其付诸实践了。...注意下刚刚创建的这个 NSString 实例,因为很快你会用到它。...*tapped 但是我错误地假设同事 / 其他开发人员正在使用与我相同的命名约定;这个想法行不通。

2.5K50
  • iOS Crash不崩溃

    一、crash类型 1.OC层面的crash 1.1 普通类型 NSInvalidArgumentException:非法参数异常,传入非法参数导致异常,nil参数比较常见。...2.Signal层面的crash 除了OC层面的异常捕获之外,很多内存错误、访问错误的地址产生的crash则需要利用unix标准的signal机制,注册SIGABRT, SIGBUS, SIGSEGV等信号发生时的处理函数...if ([self respondsToSelector:@selector(method)]) { [self performSelector:@selector(method)]; } 当一个对象无法接收某一消息时...在一个函数找不到时,Objective-C提供了三种方式去补救: 1、调用resolveInstanceMethod给个机会让类添加这个实现这个函数 2、调用forwardingTargetForSelector让别的对象去执行这个函数...注: objc_destructInstance会释放与实例相关联的引用,但是并不释放该实例的内存。

    2.1K20

    Swift 类构造器的使用

    init 机制 在 Swift 中一个实例的初始化是分为两个阶段的 第一阶段是实例的所有属性被初始化. 第二阶段是实例的所有属性可以再次的调整以备之后的使用....Swift 的编译器会对初始化的方法进行安全地检查保证实例的初始化可以被安全正确的执行: 指定构造器必须要确保所有被类中提到的属性在代理向上调用父类的指定构造器前被初始化, 之后才能将其它构造任务代理给父类中的构造器...当到达了构造器链最顶部, 且确保所有实例包含的存储型属性都已经赋值,这个实例的内存被认为已经完全初始化。此时 阶段 1 完成....子类的便利构造器首先会被调用, 这时便利构造器无法修改子类的任何属性....跟 ObjC 不同, Swift 中的子类默认不会继承来自父类的所有构造器. 这样可以防止错误的继承并使用父类的构造器生成错误实例(可能导致子类中的属性没有被赋值而正确初始化).

    1.7K20

    MASA MAUI Plugin IOS蓝牙低功耗(三)蓝牙扫描

    考虑到Swift语法对于c#开发人员更友好,本文示例代码参考Swift,相关代码来自苹果开发者官网 https://developer.apple.com/documentation 开发步骤 修改项目...Name: NSInvalidArgumentException Reason: -[Masa_Blazor_Maui_Plugin_Bluetooth_MasaMauiBluetoothService_BluetoothDelegate...该状态一共有如下枚举,从字面意思很好理解 Unknown, //手机没有识别到蓝牙 Resetting, //手机蓝牙断开连接 Unsupported, //手机蓝牙功能没有权限 Unauthorized...调试过程如果提示类似 Could not find executable for C:\Users\xxx\AppData\Local\Temp\hbjayi2h.ydn 找不到文件的情况,右键选择清理项目即可,如果无法解决手动删除...The error code was "MuxError"的错误,请检查你的数据线,重新插拔或者更换原装线。

    1.6K10

    Swift 周报 第四十一期

    前言 本期是 Swift 编辑组整理周报的第四十一期,每个模块初步成型。各位读者如果有好的提议,欢迎在文末留言。...完成 Swift 6 语言模式的数据竞争安全所需的剩余语言工作将分为两类: 填补严格并发模型中的所有漏洞,以便静态地或在静态安全无法证明的情况下动态地诊断数据竞争。...Swift 5.10 包含了许多与 actor 隔离和 Sendable 检查有关的重大错误修复。...换句话说,专门用于非尽事枚举的要求,即添加 @unknown 默认情况,以处理未来的枚举案例,已从 “Swift 4 中的警告/Swift 5 中的错误” 降级为 “Swift 4 中的运行时陷阱/Swift...我们做出了这个决定,考虑到了几个因素,其中包括: 自 Swift 5 迁移以来已经过去了很多年,而且该警告始终是无法消除的,除非实际编写 @unknown default 情况。

    23140

    Objective-C Runtime编程指南(1)

    数据结构捕获类和类别定义以及协议声明中的信息; 它们包括Objective-C编程语言中定义类和协议以及方法选择器实例变量模板和从源代码中提取的其他信息中讨论的类和协议对象。...该表具有将方法selector与其识别的方法的类特定地址相关联的条目。...虽然这些参数没有明确的声明,但源代码仍然可以引用它们(就像它可以引用接收对象的实例变量一样)。 一个方法将接收对象称为self,并将其作为_cmd自己的选择器。...您可以实现resolveInstanceMethod:和resolveClassMethod方法分别为实例和类方法的给定选择器动态提供实现。...forwardInvocation:方法可以充当无法别的消息的分发中心,将其分发给不同的接收者。 或者它可以是一个中转站,将所有信息发送到同一个目的地。

    80820

    Travis CI 教程:入门

    iOS 模拟器屏幕截图 2015 年 7 月 11 日,下午 9.46.21 使用选择器从当前日期选择一个不到一个月的日期,然后点击 “* 创建任务”* 按钮。你会看到以下内容: ?...单击 build Build#1 无法 获取失败构建的结果: ?...当您从测试人员或用户那里获得错误报告时,最好编写一个测试来说明错误并显示错误。这样,当测试运行时,您可以确信该错误没有神奇地再次出现 - 通常称为回归。 让我们确保当您在列表中标记任务时,应用会记住。...幸运的是,这是不是 太 很难解决 - 抓住从实例到单元格的引用 MasterViewController 从故事板实例化,并使用它的 tableView(_:cellForRowAtIndexPath:...如果您正在创建签名的构建,则还可以添加 构建后脚本, 以便在合并后测试通过时自动将构建上载到 HockeyApp 或 iTunes Connect。 然而, Swift 并不总是阳光和棒棒糖。

    5.1K21

    如何使用Selenium WebDriver查找错误的链接?

    除了导致404错误的页面外,断开链接的其他主要示例是格式错误的URL,指向移动或删除的内容(例如,文档,pdf,图像等)的链接。...链接到移动或删除的内容,如视频,文档等。如果内容被移动,则“内部链接”应重定向到指定的链接。 网站维护导致网站暂时停机,导致该网站暂时无法访问。...400(错误请求-错误主机) 这表明主机名无效,由于该主机名无法处理请求。 400(错误请求-错误URL) 这表明服务器无法处理请求,因为输入的URL格式不正确(例如,缺少括号,斜杠等)。...400(错误请求-超时) 这表明HTTP请求超时。 400(错误请求-空) 服务器返回的响应为空,没有内容,也没有响应代码。...400(错误请求-重置) 这表明服务器无法处理该请求,因为它正忙于处理其他请求或站点所有者对其进行了错误配置。 403(禁止) 真正的请求发送到服务器,但由于需要授权,因此拒绝履行该请求。

    6.6K10

    苹果将为 Apple Watch X 铺路 | Swift 周报 issue 45

    前言 本期是 Swift 编辑组整理周报的第四十五期,每个模块初步成型。各位读者如果有好的提议,欢迎在文末留言。 Swift 周报在 GitHub 开源,欢迎提交 issue,投稿或推荐内容。...4) 讨论接受 Type 并返回该 Type 的实例的通用函数 问题 该问题是由于尝试在 Swift 协议函数中使用类型参数根据条件返回特定类型实例 (shadowFilter) 而引起的。...旨在返回特定类型的实例(如果在一致类中可用)。...然而,在 FilterManager 的实现中,尝试将 ShadowFilter 返回为 T 会导致编译器错误,因为无法将 ShadowFilter 直接转换为泛型类型 T。...MongoDB 还创建了另一个数据库驱动程序,该驱动程序提供了包装其内部 C 实现的 Swift API。 然而,该驱动程序是生态系统中的一个相对较新的成员,自此停产。

    14532

    Swift 周报 第四十三期

    前言 本期是 Swift 编辑组整理周报的第四十三期,每个模块初步成型。各位读者如果有好的提议,欢迎在文末留言。...讨论的序言中提出的一个具体问题提到,所提议的宏可能无法有效地处理从函数体抛出的错误。有人建议使用一种新的延迟块来捕获抛出的错误,从而允许访问块内的这些错误以进行处理。...该对话强调了与处理重复的枚举案例名称相关的编译器错误,该错误使枚举实例的唯一性变得复杂。...讨论Swift OpenAPI Generator 1.0.0-alpha.1(候选发布版)发布(Multipart、base64、过滤、递归类型等)[10] 内容概括 Swift OpenAPI Generator...计算机编程语言原理与源码实例讲解:Swift 函数和闭包[15] 摘要: 这篇 Swift 博客介绍了计算机编程语言原理与源码实例中的 Swift 函数和闭包。

    22110

    Telegram-iOS 第 2 部分的源代码演练:SSignalKit

    start 订阅者 订阅者有逻辑将数据发送到每个观察者关闭与线程安全考虑。...状态无法逆转 putNext 只要用户未终止,就向关闭发送新数据next putError 向关闭发送错误并标记终止的订阅者error putCompletion 调用关闭并标记终止的订阅者。...DeviceAccess.authrizeAccess Signal.start 返回一个 Disposable实例 。 最佳做法是将其保存在字段变量中并将其处理在。...有效的字符串应发送到后端以进行可用性检查。如果快速键入,请求的数量应受到限制。 UI 反馈应遵循用户的意见。屏幕上的消息应告知新用户名的状态:它正在检查、无效、不可用或可用。...提供了多个辅助功能来更新它并获取新实例

    2.1K20

    Swift 周报 第四十三期

    前言 本期是 Swift 编辑组整理周报的第四十三期,每个模块初步成型。各位读者如果有好的提议,欢迎在文末留言。...讨论的序言中提出的一个具体问题提到,所提议的宏可能无法有效地处理从函数体抛出的错误。有人建议使用一种新的延迟块来捕获抛出的错误,从而允许访问块内的这些错误以进行处理。...该对话强调了与处理重复的枚举案例名称相关的编译器错误,该错误使枚举实例的唯一性变得复杂。...讨论Swift OpenAPI Generator 1.0.0-alpha.1(候选发布版)发布(Multipart、base64、过滤、递归类型等)[10] 内容概括 Swift OpenAPI Generator...计算机编程语言原理与源码实例讲解:Swift 函数和闭包[15] 摘要: 这篇 Swift 博客介绍了计算机编程语言原理与源码实例中的 Swift 函数和闭包。

    23410

    Swift基础 可选链条

    翻译自:https://docs.swift.org/swift-book/LanguageGuide/OptionalChaining.html 可选链是一个在当前可能为nil的可选链上查询和调用属性...主要区别在于,当可选链接为nil,可选链会优雅地失败,而当可选链接为nil,强制展开包装会触发运行时错误。...如上例所示,当residence为nil,此可选的Int也将为nil,以反映无法访问numberOfRooms的事实。...该函数在返回值之前打印“函数调用”,该值允许您查看是否计算了=运算符的右侧。...连接多个级别的链条 您可以将多个级别的可选链链接在一起,以深入了解模型中更深处的属性、方法和下标。然而,多个级别的可选链不会为返回的值添加更多级别的可选性。

    11400

    iOS_Crash 异常类型

    在 ARM 处理器上显示为 EXC_BREAKPOINT(SIGTRAP) 在 x86_64 处理器上显示为 EXC_BAD_INSTRUCTION(SIGILL) Swift 运行时错误 Swift...如果 Swift 运行时遇到编程错误,运行时会捕获该错误并故意使程序崩溃,这些崩溃在崩溃报告中具有可识别的异常信息: 在 ARM 处理器: Exception Type: EXC_BREAKPOINT...向释放的对象发送消息可能会导致OC运行时的objc_msgSend、objc_retain、objc_release函数崩溃。...尽管可以通过减少应用程序在后台任务中执行的工作量来避免该问题,但0xc51bad03并不表明该应用程序做了任何错误。更有可能的是,由于整体系统负载,应用程序无法完成其工作。 ---- 5....系统将文件描述标记为受保护,以使普通文件描述的 API 无法修改它们。

    1.8K20
    领券