在 Objective-C 框架中使用 Swift 闭包

2023-12-23

我正在使用 MCSwipeTableViewCell 框架来实现可滑动的 tableviewcell。内的完成块之一cellForRowAtIndexPath函数看起来像这样:

[cell setSwipeGestureWithView:checkView color:greenColor mode:MCSwipeTableViewCellModeSwitch state:MCSwipeTableViewCellState1 completionBlock:^(MCSwipeTableViewCell *cell, MCSwipeTableViewCellState state, MCSwipeTableViewCellMode mode) {
      // run some function call
}];

我使用桥接头文件将框架导入到我的 Swift 项目中,并尝试在 Swift 中使用相同的完成块。这就是我所拥有的:

cell.setSwipeGestureWithView(crossView, color: UIColor.colorFromRGB(RED), mode: MCSwipeTableViewCellMode.Switch, state:MCSwipeTableViewCellState.State1, completionBlock: { (cell: MCSwipeTableViewCell!, state: MCSwipeTableViewCellState!, mode: MCSwipeTableViewCellMode!) -> Void in
    self.runSomeFunction();
});

问题是每次运行都会崩溃self.runSomeFunction()即使函数调用已实现。错误是

无法识别的选择器

sent to instance 0x165c7390
2014-07-07 16:23:14.809 pong[3950:60b] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSArrayM runSomeFunction]: unrecognized selector sent to instance 0x165c7390'

我知道完成块有效,因为我可以从中进行 NSLog 并且它显示一些内容,但尝试访问 self 总是会导致崩溃。

有任何想法吗?我不应该尝试访问自我吗?

===更新===

我主要想弄清楚的是如何访问self在 Swift 闭包内。它不断抛出错误的访问错误。

这是正在运行的代码

 func tableView(tableView: UITableView!, cellForRowAtIndexPath indexPath: NSIndexPath!) -> UITableViewCell!
{
    var cell = tableView.dequeueReusableCellWithIdentifier("userCell") as MCSwipeTableViewCell!

    if !cell {
        cell = MCSwipeTableViewCell(style: UITableViewCellStyle.Value1, reuseIdentifier: "userCell")
     }
    cell.setSwipeGestureWithView(crossView, color: UIColor.colorFromRGB(RED), mode: MCSwipeTableViewCellMode.Switch, state:MCSwipeTableViewCellState.State1, completionBlock: { (cell: MCSwipeTableViewCell!, state: MCSwipeTableViewCellState!, mode: MCSwipeTableViewCellMode!) -> Void in
        self.runSomething();
    });
    return cell
}

 func runSomething()
{
    NSLog("hey there");
}

您可以定义一个捕获列表 https://developer.apple.com/library/prerelease/mac/documentation/Swift/Conceptual/Swift_Programming_Language/AutomaticReferenceCounting.html#//apple_ref/doc/uid/TP40014097-CH20-XID_66! to use self在这样的闭包中:

cell.setSwipeGestureWithView(crossView, color: UIColor.colorFromRGB(RED), mode: MCSwipeTableViewCellMode.Switch, state:MCSwipeTableViewCellState.State1) {
    [unowned self]
    cell, state, mode in
    self.runSomething()
}

现在[unowned self]有时可能会崩溃所以暂时使用[weak self]并在你的封口内打开self like: self!.doSomething().

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

在 Objective-C 框架中使用 Swift 闭包 的相关文章

  • CALayer边框奇怪问题

    我正在向 CALayer 添加边框 但有一些奇怪的行为 在我应用的边框之后出现模糊边框 参见屏幕截图 这是我的代码 void configureLabel self hidden YES self textAlignment NSTextA
  • (Kiss)XML xpath 和默认命名空间

    我正在开发一个 iPhone 项目 需要解析一些 xml xml 可能包含也可能不包含默认名称空间 我需要知道如何解析 xml 以防它使用默认命名空间 由于我需要读取和写入 xml 因此我倾向于使用 KissXML 但我愿意接受建议 这是我
  • ios swift parse:从 3 个类收集数据

    我有这样的结构 User CardSet 带有指向 User objectId 的指针 user 和 col name 带有点 cards 的卡片到 Card Set objectId 和列 name 我想选择所有卡数据 包括当前用户的卡集
  • Objective-C NSString for 循环与characterAtIndex

    我试图逐个字符地循环遍历 NSString 但出现 EXC BAD ACCESS 错误 您知道如何正确执行此操作吗 我已经在谷歌上搜索了几个小时但无法弄清楚 这是我的代码 m self textLength self text length
  • 如何在 Swift 中从 UIColor 获取 RGB 代码(INT)[重复]

    这个问题在这里已经有答案了 我想在 Swift 中获取 UIColor 的 RGB 值 let swiftColor UIColor red 1 green 165 255 blue 0 alpha 1 println RGB Value
  • 使用未解析的标识符“FlurryAdInterstitial”

    我正在尝试整合Flurry Interstitial Ads使用cocoapods in Swift and Xcode 7 1 1 我正在关注开发人员雅虎网站上的此文档 https developer yahoo com flurry d
  • AVAssetExportSession 无法导出从 iCloud 下载的视频

    我正在尝试创建从用户相册中选择的视频的缩小版本 输出的最大尺寸为 720p 因此 在检索视频时 我使用 mediumQualityFormat as the deliveryMode 如果用户设备中不存在原始视频或其中等质量版本 这会导致
  • UIViewControllerAnimatedTransitioning:旋转更改后黑屏片段

    我已经创建了一个视图控制器转换 只要我不更改设备方向 一切都正常 图 1 显示了应有的屏幕 然后我切换到下一个视图控制器 在其中更改方向 现在我回到第一个视图控制器并再次切换方向 然后我得到的结果如图 2 所示 出现黑色边框 请不要介意屏幕
  • 如何在没有 SDK 的情况下在 Objective C 中为 S3 创建预签名 URL?

    我正在构建一个 mac 应用程序not使用 AWS iOS 开发工具包 我尝试构建的 GET 请求应遵循以下通用格式 Authorization AWS AWSAccessKeyId base64 hmac sha1 VERB n CONT
  • 调整 UIImage 的大小而不将其完全加载到内存中?

    我正在开发一个应用程序 用户可以在其中尝试加载非常非常大的图像 这些图像首先在表格视图中显示为缩略图 我的原始代码会在大图像上崩溃 因此我重写它以首先将图像直接下载到磁盘 是否有一种已知的方法可以调整磁盘上图像的大小 而无需通过以下方式将其
  • 如何向标准 UIButton 添加徽章? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 是否可以在标准中添加看起来标准的徽章UIButton 如果不支持半原生 那么实现此目的最简单的方法是什么 示例图片 这是 Sascha
  • 在实例化对象之前是否可以检查故事板中是否存在标识符?

    在我的代码中我有这一行 但我想知道是否有办法检查是否 一些控制器 在我将它与 一起使用之前就存在实例化ViewControllerWithIdentifier 方法 如果标识符不存在 则应用程序崩溃 如果没有好的方法 这并不是一个大问题 我
  • 如果我使用自定义 UITableViewCell,是否需要设置 heightForRowAtIndexPath?

    如果我使用自定义 UITableViewCell 是否需要设置 heightForRowAtIndexPath 在我的 NIB 中 我已经设置了单元高度 当我覆盖 heightForRowAtIndexPath 时 单元格的内容不会出现 即
  • 叠加 SKScene 未显示

    我正在尝试将 SKScene 覆盖在 SCNScene 上 当我在模拟器和 iPhone6 上运行我的应用程序时 overlayScene SKScene 按预期显示 但是当我尝试在 iPhone5 上运行它 尝试了 2 个不同的设备 时
  • 当直接从 usdz 文件而不是 Reality Composer 文件加载模型时,如何在 RealityKit 中渲染阴影?

    将模型直接从 usdz 文件添加到场景锚点时 模型下方不会出现接地阴影 如果您将模型导入 RealityComposer 并添加 RealityComposer 场景 则会出现这些 但是 您可以在不使用 RC 的情况下启用接地阴影吗 我尝试
  • iOS:如何知道 reloadData() 已完成其任务?

    我想滚动到给定索引 self boldRowPath 但是当我调试时scrollToRow之前执行reloadData 如何知道reloadData已完成 func getAllTimeEvent self arrAllTimeEvent
  • 如何在 UICollectionView 中将行居中?

    我有一个UICollectionView与随机细胞 有什么方法可以让我将行居中吗 默认情况下它是这样的 x x x x x x x x x x x x x x 这是所需的布局 x x x x x x x x x x x x 我必须做这样的事
  • 如何更改 SwiftUI 列表中分隔符的颜色?

    我在 SwiftUI 中创建了一个列表 我想更改颜色或删除分隔符 因为在 UIKit 中 我们可以轻松更改 TableView 中分隔符的颜色 下面是 SwiftUI 中列表的代码和 UI 图片 State private var user
  • CoreBluetooth:检测设备超出范围/连接超时

    我正在设计一个 iOS 框架来处理多个 BLE 设备 均为同一类型 目前一切都运行良好 除了一件事 客户想要一个包含可用设备的列表 但是 我如何检测过去发现的设备何时不再可用 当我尝试连接到不再可用的设备时 会出现另一个问题 文档说 连接尝
  • 更改 iOS7 中 UIAlertView 的字体大小

    我想更改alertView中消息文本和标题文本的字体大小 苹果网站上没有任何文档谈到这一点 但苹果在其子类注释中表示 UIAlertView 类旨在按原样使用 请参考以下链接 https developer apple com librar

随机推荐

  • 从 Java 中的基类访问子类字段

    我有一个名为的基类Geometry其中存在一个子类Sphere public class Geometry String shape name String material public Geometry System out print
  • setTimeout返回什么?

    我很好奇 setTimeout 返回什么 所以我做了一个快速测试 var thing setTimeout function 1 让我惊讶的是它给了我一个数字 1351每次都是不同的 那么它返回的真的只是一个数字吗 那么我实际上也可以这样做
  • 交叉过滤查询

    是否可以过滤以数组作为值的交叉过滤数据集 例如 假设我有以下数据集 var data bookname the joy of clojure authors Michael Fogus Chris Houser tags clojure l
  • 如果定义了属性,则从 Waterline 中的模型中获取结果

    我有一个模型 其中不需要每个属性 我想查询模型并返回属性所在的所有实例is定义的 这就是我的think代码应该看起来像这样 但它不起作用 有什么想法或一些详细文档的链接吗 MyModel find where propertyThatMay
  • iOS SDK:切换相机时如何导致视图翻转

    在 iOS Objective C 上相当新 我正在对 Apple 进行修改AVCam http bit ly IFQn3h 视频采集 示例代码 想在前后摄像头切换时模仿原生摄像头的翻转动画 看起来这似乎很容易 但我无法掌握它是如何完成的
  • extjs解析模板中嵌套的json

    尝试 未成功 显示嵌套 json 中的数据 JSON 可能看起来像 contacts id 1 client id 135468714603 addresses id 1 contact id 1 address id 16 address
  • R中magrittr和arima的兼容性问题

    考虑以下示例 library tidyverse set seed 1 forecast forecast x lt cumsum rnorm 10 y1 lt arima x order c 1 0 0 y2 lt x gt arima
  • 保存模型会破坏一对多关系

    当我保存一个父对象 其中有许多子对象 时 这种关系似乎被破坏了 这Ember 文档 http emberjs com guides models persisting records 在这个问题上保持沉默 我需要做什么才能使父对象仍然显示子
  • JavaScript 中 += 和 =+ 的区别

    我想知道为什么运行第三行代码后的结果是a is 5 a 10 b 5 a b 尴尬的格式 a b 相当于 a b And b只是一种奇特的铸造方式b编号 如下所示 var str 123 var num str 您可能想要 a b 相当于
  • Nginx server_name regexp 不能作为变量使用

    有人告诉我为什么我仍然遇到这样的错误吗 Restarting nginx emerg unknown domain name variable configuration file etc nginx nginx conf test fai
  • Dapper MultiMap 不适用于具有 NULL 值的 splitOn

    我在尝试在包含以下内容的列上进行拆分时 在 dapper 中遇到了 MultiMaps 的问题NULL Dapper 似乎没有实例化对象 我的映射函数接收到null而不是对象 这是我的新测试 class Product public int
  • 响应宽度 Facebook 页面插件

    Facebook 推出了新的页面插件来取代 Like 框插件 文档 https developers facebook com docs plugins page plugin https developers facebook com d
  • 在 Highcharts 股票图表上将最后一点的值显示为标签或工具提示

    我在一张股票图表 HighCharts 中有多个不同比例的数据系列 我想将每个系列连接到它的轴或显示每个系列的最后一个点的值 类似于数据标签 但仅适用于每个系列的最后一个点 function container highcharts cha
  • 如何在 contenteditable div 中输入时创建一个段落?

    我正在为我的一个项目制作一个简单的编辑器 我需要使用可编辑的 div 使用contenteditable财产 我需要两个功能 输入两次后自动插入小时 创建一个段落而不是 br 进入并专注于它 所以我写了这个 带着一些灵感 这是负责的代码的一
  • 如何将 EditTextPreference 限制在范围 1024:65535

    我有一个 EditTextPreference 定义为
  • missModalViewControllerAnimated 非原子的?

    看来我有一个奇怪的时间问题 我打开 uiimagepicker 作为模态视图 当用户选择图像或我想要拍摄图像时 将其保存到变量中 然后以模态视图打开电子邮件界面 我的问题是 我在图像选择器上调用dismissModalViewControl
  • Visual Studio 2017 和 SAP Crystal Reports

    我已经下载并安装了视觉工作室 2017 社区之后我下载并安装了Crystal Report 支持包 20 v 13 0 20 2399 我打开了视觉工作室2017并创建一个新项目 然后右键单击我的项目 然后单击添加项目 我寻找水晶报告 rp
  • 提升文件末尾序列化

    我使用 Boost 将多个对象序列化为二进制存档 当从 a 读回这些对象时binary iarchive 有没有办法知道存档中有多少对象 或者只是检测存档结尾的方法 我发现的唯一方法是使用 try catch 来检测流异常 提前致谢 我可以
  • ggplot:如何根据相对于绘图宽度的边距来换行标题文本

    当使用绘图时ggplot2 如何将标题文本换行以适应相对于绘图整个宽度的边距 library ggplot2 library stringr my title lt c reltively long sentences that norma
  • 在 Objective-C 框架中使用 Swift 闭包

    我正在使用 MCSwipeTableViewCell 框架来实现可滑动的 tableviewcell 内的完成块之一cellForRowAtIndexPath函数看起来像这样 cell setSwipeGestureWithView che