问题标签 [method-swizzling]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
156 浏览

objective-c - Method Swizzling - 请解释此实现中的属性映射

我正在研究一个开源的 pull-to-refresh 控件,它在 UIViewController 类别上调整生命周期方法,如下所示:

我知道当viewWillAppear被调用时它映射到上述方法,并且调用[self INBPullToRefreshView_viewWillAppear:animated];将映射到原始的viewWillAppear.

但是,以下内容有什么作用?:


这是控件的github 源代码

0 投票
2 回答
1013 浏览

objective-c - 在方法调配中使用 dispatch_once

在 NSHipter 关于方法swizzling 的文章中,它说“Swizzling 应该始终在 dispatch_once 中完成”。为什么这是必要的,因为 +load 每个类只发生一次?

0 投票
1 回答
1749 浏览

ios - 对单例进行单元测试:mock 和 swizzle

我目前正在尝试测试一些使用的代码,AVAudioSession并且我尝试模拟它,因为它是一个单例,到目前为止证明很困难,我做了一些研究,并想到了调整它获取实例的方式然后实际初始化的想法你想要的子类,但我无法弄清楚要调配的方法。我尝试了 sharedInstance 并且class_addMethod()返回 yes 说它是添加而不是替换它。我可以以这种方式有效地模拟单身人士吗?

0 投票
3 回答
7221 浏览

unit-testing - 如何在 Swift 中模拟 NSDate?

我必须测试一些日期计算,但为此我需要NSDate()在 Swift 中进行模拟。整个应用程序都是用 Swift 编写的,我也想在其中编写测试。

我尝试过方法调配,但它不起作用(或者我做错了更有可能)。

测试:

date始终是当前日期。

0 投票
1 回答
2021 浏览

ios - 协议的方法调配

我希望能够调配协议方法,例如textFieldDidBeginEditing:tableView:didSelectRowAtIndexPath:。如何才能做到这一点?

0 投票
2 回答
783 浏览

ios - 如何混入 Objective-C 方法的完成块?

我们以这个方法为例:

animatedWithDuration:animations:completion:在方法本身的不同或修改的实现中调配很简单。如果我有兴趣为完成块执行此操作怎么办?

0 投票
2 回答
698 浏览

ios - 项目中使用 WYPopover 时 UINavigationControllerDelegate 方法调用崩溃

我正在开发一个包含 WYPopoverController 的应用程序,它在应该的地方工作得很好。我想在两个控制器之间添加自定义动画,而不是内置推送/弹出。

在包含 FROM 和 TO 控制器的导航控制器中,我不做任何与 WYPopoverController 相关的事情,在控制器 FROM 和 TO 中也不做任何事情。

我已经实现了导航控制器委托,非常简单和处理实际动画的动画师类。

动画师类:

在 FROM 控制器中,我初始化导航委托

一切都编译并运行,直到我点击(收集)单元格并想要移动到 TO 控制器。此时应用程序崩溃并出现错误:-[CALayer navigationController:animationControllerForOperation:fromViewController:toViewController:]: unrecognized selector sent to instance 0x7fc72e53e970

我添加了一个断点,最终进入sizzled_pushViewController:animated:了 UINavigationController 的方法。老实说,我不知道如何处理这个问题。

屏幕截图 2015-05-21 在 15 48 04

0 投票
3 回答
83 浏览

ios - 方法调配以保持更清洁的类实现

我处于我的应用程序的一个视图控制器变得非常大的情况下,特别是因为我添加了一个“教程状态”,它为我通过检查控制的此类的许多方法添加了不同的实现

所以,我的问题是,如果这是一个很好的方法调配用例,我可以将这些方法的不同实现放在一个单独的类别中,并在需要时调配它们,这可能有助于我减少默认实现的代码量。对其他技术的任何意见或建议表示赞赏。

0 投票
1 回答
572 浏览

ios - 如何在 iOS 中调配 UIApplication?

我需要对Swizzle UIApplication方法进行分类,尤其是“ application:handleOpenURL:”。我添加了 UIApplication 的类别类。我已经将自己的方法与原始方法交换了,但它从未触发过。Swizzle 类在应用程序启动的第一次调用,但从未触发 swizzle 方法。我附上了代码供您参考。

谁能拯救我的一天?我尝试使用一些私人图书馆,如“RSSwizzle”,但没有帮助。

0 投票
0 回答
412 浏览

ios - 方法 Swizzling 不适用于 UIViewController 的类别

我使用正常的调酒方法:

我想和viewWillAppear:交换xxx_viewWillAppear:。所以我创建了一个 UIViewController 的类别并创建了方法xxx_viewWillAppear:

如果我dispatch_once+(void)load调用方法中使用swizzleMethod,一切都会出错。

它会viewWillAppear:在 UIViewController 中调用,当[super viewWillAppear:animated]被调用时,xxx_viewWillAppear被调用。

但是如果我将加载方法放在 UIViewController 中(不在类别中),它就会正确。

所以为什么?

我使用 xcode 6 和 iOS 8。