我有一个内部类,它采用UIScrollViewDelegate,但不实现scrollViewWillEndDragging(_:withVelocity:targetContentOffset:).我想使用class_addMethod将此方法添加到类中,但不幸的是,在try 将新值赋给targetContentOffset时遇到了EXC_BAD_ACCESS错误.

以下是我的代码:

func extendDelegate(scrollViewDelegte: UIScrollViewDelegate) {
   let block : @convention(block) (UIScrollView, CGPoint, UnsafeMutablePointer<CGPoint>) -> Void = { scrollView, velocity, targetContentOffset  in
      // EXC_BAD_ACCESS here. 
      // I can read the pointee and it does contain a valid CGPoint value, 
      // however assigning to it gives a crash.
      targetContentOffset.pointee = .zero
   }

   class_addMethod(
      type(of: scrollViewDelegte),
      #selector(UIScrollViewDelegate.scrollViewWillEndDragging(_:withVelocity:targetContentOffset:)),
      imp_implementationWithBlock(block),
      "v@:@{CGPoint=dd}^{CGPoint=dd}"
   )
}

如有任何帮助,不胜感激!

推荐答案

摘自《S百年文集》:

块的签名应为METHOD_RETURN_TYPE ^(id self, method_args ...)

我认为你在参数中遗漏了self .

Ios相关问答推荐

实例方法wait在异步上下文中不可用;请改用TaskGroup;这是Swift 6中的错误''

如何在SwiftUI中拥有基于操作系统版本的条件修饰符?

IOS:在UI线程中执行代码的闭包样式的替代

执行devicectl:ProcessException时出错:进程异常退出:错误:命令超时超过5.0秒

确保方法调配的安全有效实施

Swift Combine和iOS版本限制?

如果使用 .onAppear 设置,为什么 SwiftUI Picker 不显示正确的选定值

为什么@FetchRequest 在删除时不更新和重绘视图?

Apollo iOS 客户端代码生成:错误:无法查询字段

工具栏底部 iOS 16 - SwiftUI

卡在 Apple 的 SwiftUI 教程第 5 章(更新应用数据)

SwiftUI 中的偏移量和按钮有问题吗?

Xcode 14 弃用了位码 - 但为什么呢?

如何在 Swift 中从另一个视图控制器将元素附加到数组中

如何 comments .plist 文件中的行?

如何使用 swift 显示 .svg 图像

如何使用 sendAsynchronousRequest:queue:completionHandler:

在滚动视图中使用动态大小的控制器调整容器视图的大小

Xcode 5 和 iOS 7:架构和有效架构

在两个或多个 iPhone 应用程序之间共享数据