CLLocationManagerDelegate 协议中的挂钩

2024-04-23

我已经 3 天遇到问题了:( 我想在 CLLocationManagerDelegate 协议中挂钩此方法:

- (void)locationManager:(CLLocationManager *)manager
     didUpdateLocations:(NSArray *)locations

我尝试了一切但没有成功。我知道如何挂钩类或框架,但我找不到挂钩委托的解决方案。 请帮我! 谢谢


挂钩要求您提供想要挂钩的 Objective-C 类。这是什么Class类型是为了.获取 obj-c 类的一种方法是通过名称objc_getClass功能。但就你的情况而言,据我正确理解,你没有名字。你想要挂钩每个符合以下条件的类CLLocationManagerDelegate协议并实现具体方法。这是您可以做的。

您可以获取每个已注册的 obj-C 类并搜索符合以下条件的类CLLocationManagerDelegate像这样的协议:

static IMP original_didUpdateLocations;
void replaced_didUpdateLocations(id self, SEL _cmd, CLLocationManager* manager, NSArray* locations)
{
    NSLog(@"%@ did update locations to %@", manager, locations);

    original_didUpdateLocations(self, _cmd, manager, locations);
}

...

#import <objc/runtime.h>

int numClasses = objc_getClassList(NULL, 0);

Class* list = (Class*)malloc(sizeof(Class) * numClasses);
objc_getClassList(list, numClasses);    

for (int i = 0; i < numClasses; i++)
{
    if (class_conformsToProtocol(list[i], @protocol(CLLocationManagerDelegate)) && 
        class_getInstanceMethod(list[i], @selector(locationManager:didUpdateLocations:)))
    {
        MSHookMessageEx(list[i], @selector(locationManager:didUpdateLocations:), (IMP)replaced_didUpdateLocations, (IMP*)&original_didUpdateLocations);
    }
}

free(list);
  1. 我们需要知道有多少个班级。objc_getClassList(NULL, 0)返回所有注册类的数量。

  2. 分配内存与malloc(sizeof(Class) * numClasses)并用类型的对象填充它Class using objc_getClassList(list, numClasses).

  3. 在所有这些类中搜索符合以下条件的类CLLocationManagerDelegate协议和实施locationManager:didUpdateLocations:方法。如果我们找到了一个,我们就会将它与我们自己的实现挂钩。

  4. 在我们自己的实现中,我们打印一些调试消息并在返回之前调用原始实现。当然,你可以做任何你想做的事,这只是一个例子。

  5. 使用释放分配的内存free(list).

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

CLLocationManagerDelegate 协议中的挂钩 的相关文章

  • 挂钩 Win32 窗口创建/调整大小/查询大小

    我正在尝试 扩展 现有的应用程序 The goal就是在不更改应用程序代码的情况下使现有应用程序变得更大 一个约束拉伸的应用程序不会 注意到 它 因此 如果应用程序查询创建的窗口大小 它将看到原始大小 而不是调整后的大小 我设法使用调整窗口
  • NSFetchedResultsChangeDelete 未被触发

    以前有人遇到过这个吗 当我选择从 tableView 由 FRC 填充 中删除一行时 应用程序不会崩溃或挂起 它没有任何作用 删除按钮保持选中状态 如果我单击模拟器上的其他位置 删除按钮将取消选择并消失 但单元格永远不会从 UI 中删除 我
  • 在 Mac OS X 中获取进程创建通知

    我正在尝试为 Mac OS X 编写 kext 当任何进程启动时都会收到通知 在 Windows 中 您可以通过调用 PsSetLoadImageNotifyRoutine 并指定在进程启动时调用的回调来完成此操作 这是有记录的方式 它适用
  • locationServicesEnabled 始终返回 YES

    我测试了我的设备 iPod Touch 2G iOS 4 1 是否启用了位置服务 permitted locationManager locationServicesEnabled 无论是否启用定位服务 我总是得到 是 我说的是位置服务的通
  • 共享一个类的离散匿名方法?

    我在玩埃里克 利珀特的Ref
  • 如何在选择自定义 UITableViewCell 时获取触摸坐标?

    当我触摸 触摸 UITableViewCell 时 我的 ViewController 的 UITableViewDelegate 方法 void tableView UITableView tableView didSelectRowAt
  • 在 Objective-c 问题中访问委托静态方法

    我在 Objective c 中遇到了一个奇怪的问题 这是代码 STViewController h import
  • 使用变体泛型委托类型对运算符 == 进行重载解析

    重载解析的精确规则是什么 两个委托类型表达式之间 考虑以下代码 其中using System 是需要的 static class ProgramA static void TargetMethod object obj static voi
  • 如何在Windows平台上编写Git Server Hooks?

    我找不到任何适用于 Windows 的 Git 挂钩的明确示例 我在 Windows Server 上使用 Bonobo Git Server 我需要预提交和提交后挂钩作为 cmd 或 bat 预提交应检查空注释 提交后应发送有关提交的电子
  • 在 Objective-C 中呈现另一个类的“控制器”

    如何呈现来自另一个类的 UIAlertController 我想知道如何捕获在 B 类中创建但在 A 类中呈现的 UIAlertController 中的 确定 按钮的操作 这就是我调用在 ClassA 的类 ErrorHandler 上创
  • 用于阻止大于 20MB 的提交的预提交挂钩

    是否可以为 SVN 1 8 编写 prcommit 挂钩以避免提交大于 20MB 的文件 任何建议 将不胜感激 谢谢 我尝试过 但这不适用于二进制文件或其他文件扩展名 filesize SVNLOOK cat t TXN REPOS f w
  • Mercurial hook 的操作类似于“changegroup”,但仅在推送时?

    我们已经构建了一个变更集传播机制 但它依赖于捆绑和解除捆绑新变更集 如果我们要使用changegroup钩子 那么它会导致循环行为 因为钩子是运行的在拉 推或解绑期间 http mercurial selenic com wiki Hook
  • 全局键盘挂钩的合法用途是什么?

    除了仅应由操作系统提供的应用程序启动快捷方式之外 Windows 键盘挂钩等东西的合法用途是什么 在我看来 我们只在键盘记录器之类的事情上遇到问题 因为操作系统提供了钩子来执行除操作系统内核本身之外的任何情况下任何人都不允许执行的操作 编辑
  • 使用主题函数在 body 标记后插入代码

    我试图在开头添加一段代码everyDrupal 站点中的页面 因为我有不止一个page模板 我想以编程方式执行此操作 但没有成功 我还是个新手 虽然我了解了钩子 主题函数等的要点 但我只是想不出实现这一目标的正确方法 到目前为止我已经覆盖了
  • 使用 swift 在 WKWebView 上显示活动指示器

    我正在处理以下代码 并尝试在页面加载时在视图中显示活动指示器 我尝试实施WKNavigationDelegate方法 但我失败了 因为没有任何显示 对于如何解决这个问题 有任何的建议吗 我没有设置 SupportWebView 视图dele
  • C#代表,参考解析时间

    我有一个关于 net 代表的简单问题 假设我有这样的事情 public void Invoke Action
  • 当前位置在 Google 地图中不起作用

    我在 swift 3 中集成了谷歌地图 当地图屏幕出现而不显示当前位置时 我在 plist 文件中添加了两个键 并设置了 CLLocationManager delegate 和 requestAlwaysAuthorization cla
  • 如何在 UINavigationController 中收到弹出视图的通知?

    我想在用户按下我的后退按钮时执行操作UINavigationController当到达某个时UIViewController 不幸的是它看起来像UINavigationControllerDelegate没有任何方法来获取视图弹出的通知 作
  • 低级键盘钩子不在 UI 线程上

    我想为键盘挂钩创建一个好的库 我使用 SetWindowsHookEx 方法 我注意到如果我的应用程序的主线程繁忙 则应在任何系统 KeyDown 事件中调用的方法 hookProc 不会执行 我认为钩子应该这样制作 以便另一个线程负责它
  • NSOperation 中委托的使用

    我正在尝试利用CLLocationManager in an NSOperation 作为其中的一部分 我需要能够startUpdatingLocation然后等到收到 CLLocation 后才完成操作 目前我已经完成了以下操作 但是委托

随机推荐

  • 使用纯 JavaScript 创建、追加和提交表单

    我正在尝试实现 onclick 函数 该函数使用 POST 方法发送参数 我需要这个函数来重新加载页面 这使得我使用 AJAX 之外的其他方式 我有一个函数可以做到这一点 但这个函数使用 jQuery 现在我需要将其 移植 到纯 JavaS
  • 初始化函数破坏单元测试

    在我想要测试的包中 我有一个 init 函数 它加载配置文件 其中包含我想用来运行应用程序的一些内容 但是 我不想在运行单元测试时触发此初始化函数 有没有办法在单元测试期间跳过或阻止调用此 init 函数 一些片段来说明这个问题 func
  • 使用 SKAction colorizeWithColor 使 SKSpriteNode 闪烁白色

    好的 我有一个精灵 当被某物击中时应该会闪烁白色 我正在使用这个 SKAction changeColorAction SKAction colorizeWithColor SKColor whiteColor colorBlendFact
  • 使用 array_diff 时保留重复项

    我使用 array diff 从 array1 中取出在 array2 中找到的值 问题是它删除了 array1 中的所有出现项 正如 PHP 文档所指出的那样 我希望它一次只取出一个 array1 array array1 a array
  • 使用 haskell 构建动态库并从 C++ 中使用它

    我想构建一个包含 haskell 函数的动态库 我在 Linux 上工作 想从 C 代码中调用这个动态库 我用的例子是http wiki python org moin PythonVsHaskell http wiki python or
  • Java中如何检查抛出的异常类型?

    如果一个操作捕获了多个异常 如何确定捕获了哪种类型的异常 这个例子应该更有意义 try int x doSomething catch NotAnInt ParseError e if thrown error is NotAnInt li
  • 为什么 Google Analytics 使用 __utm.gif?

    只是想了解他们为什么不使用 REST API 在REST中 客户端向服务器发起资源请求 服务器处理这些请求并返回适当的响应 The utm gif不参与服务器到客户端的数据传输 而是参与向另一个方向移动数据 当然 REST 具有供客户端与服
  • 是否可以将公共IP分配给AWS中的Lambda函数?

    我们需要访问企业后端中的 API 该 API 仅接受来自授权 IP 地址的调用 此时 我们的移动客户端正在调用 AWS Lambda 函数 该函数执行一些转换 然后调用分配了授权公共 IP 地址的 EC2 实例上的另一个服务 第二个服务执行
  • SQLite数据适配器不显示数据

    我试图在 Windows 窗体应用程序中填充数据网格视图 但当我执行选择查询时 数据库没有返回任何内容 我已经在本网站上查看了有关此主题的其他问题 但找不到任何可以解决我的问题的内容 数据视图表的名称是qbcMemDataView 数据源是
  • 如何使用 Java 中的 Scanner 将输入值存储在数组中

    您好 我是 Java 新手 我正在尝试 Scanner 类 我试图解决一个小问题 我想输入两个输入 例如 4 5 6 和 8 9 0 我想将 4 5 6 存储在一个数组中 将 8 9 0 存储在另一个数组中 然后打印这些数组 但我无法这样做
  • “:=”有什么作用?

    我见过 在多个代码示例中使用 但从未附带说明 如果不知道它的正确名称 就不可能通过谷歌搜索它的用途 它有什么作用 http en wikipedia org wiki Equals sign In computer programming
  • Gitolite 权限仅限于一个分支

    我有点困惑gitolite https gitolite com gitolite 权限 仅允许 1 个分支并拒绝特定用户或组的所有其他分支的最佳方法是什么 See 部分复制 分支的选择性读取控制 https gitolite com gi
  • 从列表转换为数字

    我正在从列表形式强制转换为数字形式 如果有用的话 列表最初是从一个因素中绘制的 并且是 1x33 行 我的列表定义为 tmpseqsf 1 其中规定 TradeValue 1 72914431 2 25325 3 20139 4 因此 根据
  • 与基于类的方法相比,使用 Hooks 设置状态后重新渲染有什么区别?

    类组件 在 React 类组件中 我们被告知setState always导致重新渲染 无论状态是否实际更改为新值 实际上 一个组件will当状态更新到时重新渲染same以前的价值 文档 setState API 参考 https reac
  • ViewPager内部的TextView拦截触摸事件

    我有一个ViewPager包含两个片段 在任何片段中我都可以触摸一个地方 滑动即可切换到另一个地方fragment 其中一个片段包含一个列表 列表中的项目包含一项TextView和一个ImageView 问题是 如果您是从点击开始拖动的Im
  • 未定义的索引:php 脚本中的错误

    在 php 页面中我有以下代码 if REQUEST c I get error on this line itself Why pidis int REQUEST c 我不断收到未定义索引错误 在谷歌搜索上 我设法理解 如果我们尝试访问的
  • Visual Studio 设置以在运行时删除对 dll 文件的依赖

    到处都有人建议当 Visual Studio 在运行时找不到 DLL 时如何让 Visual Studio 知道 但我想知道在哪里删除该选项 以便 Visual Studio 在运行时不会尝试查找 dll 文件 我昨天也有类似的问题 但没有
  • Spring XML 406错误

    我正在尝试使用 Java 制作 RESTful 服务 使用多个教程和许多 StackOverflow 条目 不幸的是 我似乎无法让我的代码工作 当我尝试到达端点时 我一直收到 Http 406 任何帮助表示赞赏 GreetingContro
  • 工厂中的依赖注入

    我对 DI 很陌生 但我真的很想尝试使用它 有件事我不明白 这是一个简单的工厂伪代码 我经常使用 class PageFactory public function construct dependency list save refere
  • CLLocationManagerDelegate 协议中的挂钩

    我已经 3 天遇到问题了 我想在 CLLocationManagerDelegate 协议中挂钩此方法 void locationManager CLLocationManager manager didUpdateLocations NS