如何动态判断Objective-C属性类型?

2024-04-03

我正在尝试动态确定 Objective-C 中属性的类型。根据我在本网站和其他地方读到的内容,我相信我正在做正确的事情。但是,我的代码不起作用。

下面的代码片段演示了这个问题。尝试获取“backgroundColor”和“frame”的属性信息(这两个属性都是 UIView 的有效属性)失败(class_getProperty() 返回 NULL):

id type = [UIView class];        
objc_property_t backgroundColorProperty = class_getProperty(type, "backgroundColor");
fprintf(stdout, "backgroundColorProperty = %d\n", (int)backgroundColorProperty); // prints 0

objc_property_t frameProperty = class_getProperty(type, "frame");
fprintf(stdout, "frameProperty = %d\n", (int)frameProperty); // prints 0

枚举所描述的属性here https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/ObjCRuntimeGuide/Articles/ocrtPropertyIntrospection.html也没有产生预期的结果。下面的代码:

NSLog(@"Properties for %@", type);
unsigned int outCount, i;
objc_property_t *properties = class_copyPropertyList(type, &outCount);
for (i = 0; i < outCount; i++) {
    objc_property_t property = properties[i];
    fprintf(stdout, "%s %s\n", property_getName(property), property_getAttributes(property));
}

生成此输出:

2012-03-09 13:18:39.108 IOSTest[2921:f803] Properties for UIView
caretRect T{CGRect={CGPoint=ff}{CGSize=ff}},R,N,G_caretRect
gesturesEnabled Tc,N
deliversTouchesForGesturesToSuperview Tc,N
skipsSubviewEnumeration Tc,N
viewTraversalMark Tc,N
viewDelegate T@"UIViewController",N,G_viewDelegate,S_setViewDelegate:
inAnimatedVCTransition Tc,N,GisInAnimatedVCTransition
monitorsSubtree Tc,N,G_monitorsSubtree,S_setMonitorsSubtree:
backgroundColorSystemColorName T@"NSString",&,N,G_backgroundColorSystemColorName,S_setBackgroundColorSystemColorName:
userInteractionEnabled Tc,N,GisUserInteractionEnabled
tag Ti,N,V_tag
layer T@"CALayer",R,N,V_layer

缺少记录的属性,例如“backgroundColor”、“frame”和其他属性,而包含未记录的属性,例如“caretRect”和“gesturesEnabled”。

任何帮助将非常感激。如果相关的话,我在 iOS 模拟器上看到了这种行为。我不知道在实际设备上是否会发生同样的情况。

谢谢, 格雷格


您正在获取 UIView 属性,问题是 backgroundColor 不是 UIView 属性,而是类别属性。检查 UIView.h。我认为你无法获得 objc_category,但请查看类转储。

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

如何动态判断Objective-C属性类型? 的相关文章

  • 使用 UItableViewCell 类型的表达式初始化“CustomCellView *”的指针类型不兼容

    你能帮我理解和 修复下面的错误吗 我不明白CustomCellView是一个子类UItableViewCell 代码已编译 但警告仍然存在 Incompatible pointer type initializing CustomCellV
  • 如果加载 dylib,垃圾收集工作队列会崩溃

    我们正在将应用程序从 10 6 移植到 10 8 我正在查看我们在应用程序中加载的 dylib 我面临着非常不寻常的崩溃垃圾收集工作队列并附有以下消息 malloc Thread suspend unable to suspend a th
  • iOS uiwebview 在 WebThread 中崩溃

    我正在寻求一些建议或帮助诊断我所看到的这次崩溃 目前 我认为这可能是一个 webkit 错误 但一切皆有可能 因此请提供您可能有的任何见解 Incident Identifier AEB8EE37 E5D4 4975 97F4 2B2038
  • 与 Objective-C 的 VPN 连接

    有没有办法在 iPhone 的 Objective C 中以编程方式建立 VPN 连接 有这方面的好教程吗 有人知道吗 多谢 我认为第三方应用程序无法访问这些 API
  • iPhone SQLite页面缓存不断增长

    I use sqlite数据库用于存储 还有许多数据库事务 我的问题是 sqlite 页面缓存的内存使用量快速增长 在instruments我可以找到这条线 Graph Category Live Bytes Living Transien
  • UISlider不会自动重绘

    我的应用程序上有一个 UISlider 有时我不仅需要更新它的值 还需要更新它的minimumValue 值已更改 但如果我调用 setValue 方法或为滑块分配新值 它会具有新值 但滑块不会将自身重新绘制到该新值应有的位置 我怎样才能重
  • 使用自动布局、IB 和字体大小时表头视图高度错误

    我正在尝试为我的 uiTableView 创建一个标题视图 不是节标题 我已经有了 我已经在界面生成器中设置了一个 XIB 所有的连接都已连接好并且运行良好 除了桌子没有给它足够的空间 我的问题是表格顶部与表格标题有一点重叠 我的 XIB
  • 保存来自 TrueDepth 相机的深度图像

    我正在尝试保存 iPhone X TrueDepth 相机的深度图像 使用AVCam照片滤镜 https developer apple com library content samplecode AVCamPhotoFilter Lis
  • 如何编辑应用程序包中的文件?

    在我的应用程序中 我从存储在捆绑资源中的 CSV 文件加载数据 但是 我希望能够在用户点击 更新 按钮时以编程方式更新此文件 有没有办法以编程方式更改应用程序包中的资源 这是我用来访问该文件的代码 NSString path NSBundl
  • 在 ios 版 Ionic 中接收 URL

    我正在使用离子框架 我正在尝试设置一种从另一个应用程序接收网址的方法 就像 您在浏览器中 单击共享 然后将链接发送到另一个应用程序 我的应用程序 我找到了这个cordova https stackoverflow com questions
  • 在 JavaScript 中检测页面是否加载到 WKWebView 中

    如何使用 javascript 可靠地检测到页面已加载到 WKWebView 中 我希望能够检测到这些场景 iOS 和 WKWebView iOS 和 Safari not iOS 关于 UIWebView 有一个类似的问题here htt
  • 在情节提要中将 Segue 拖至自身

    我想将一个 Segue 从我的视图控制器拖到其自身 所以我可以推送该特定视图控制器的 无限 实例 我知道如何在代码中执行此操作 即以编程方式实例化视图控制器 但是 我想尽可能使用 segues 我发现了一些在故事板中进行自我延续的 技巧 但
  • Swift:协议、结构、类

    我开始学习 Swift 语言 但在理解协议 结构和类方面遇到了困难 我来自 Android 方面的编程 所以我相信 Swift 协议基本上是 Java 接口 其中每一个的正确用例是什么 这些类比并不 完全 正确 但这就是我所理解的要点 是的
  • 带有 allowedEditing 的 UIImagePickerController 不允许平移裁剪

    我在这里看到这个问题 UIImagePicker 允许编辑卡在中心 https stackoverflow com questions 12630155 uiimagepicker allowsediting stuck in center
  • 将父控件的属性传递给子控件

    我正在为特定应用程序开发一组自定义控件 我想定义对于外观目的的控件集通用的属性 为了论证 让我们这样做CustomCtrl AccentColor 我想为我的 Windows 窗体定义相同的属性 即Form1 AccentColor当我更改
  • XCode 7 中的 AWSS3TransferManagerUploadRequest

    我今天升级到 Xcode 7 Swift 2 0 我的项目正在使用 CocoaPods 我正在 POD 文件中导入所有与 AWS 相关的文件 我已经设置了桥接标头 并导入了 Amazon 告诉我的所有文件 在升级到 Swift 2 0 之前
  • 当 ViewController 从 UIStoryboard 实例化时,isMemberOfClass 返回 no

    我有一个 OCUnit 测试类 PatientTestViewControllerTests 下面是界面 interface PatientTestViewControllerTests SenTestCase property nonat
  • 领域:结果 和列表

    是否可以转换Results
  • 下载进度条在 iOS 企业发行版中没有改变进度

    我正在通过企业分发开发和分发 iPad 应用程序 它们下载并执行良好 因此一切正常 Web 链接 ipa 文件 plist 文件 配置 问题 是 当用户单击链接进行下载时 iPad 中显示下载进度的进度条显示 正在等待 但却是空的并且永远不
  • 如何观察UserDefaults的变化?

    我有一个 ObservedObject在我看来 struct HomeView View ObservedObject var station Station var body some View Text self station sta

随机推荐

  • Spring AMQP - 使用带 TTL 的死信机制进行消息重新排队

    就像是 休斯顿 我们这里有问题 在第一次尝试处理事件失败后 我需要安排 延迟消息 5 分钟 我在这种情况下实现了死信交换 失败时的消息将路由至 DLX gt 重试队列 并在 TTL 为 5 分钟后返回工作队列以进行另一次尝试 这是我正在使用
  • 安装程序启动时间长 - 在 wpWelcome 之前添加对话框?

    我使用 Inno Setup 创建的安装程序大小约为 850 MB 包含约 7000 个文件和 890 个文件夹 未压缩大小为 1 98 GB 当开始安装过程时 之后Windows UAC 对话框出现后 安装程序的图标为空Taskbar约
  • 如何在Python OpenCV中删除轮廓内部的轮廓?

    Python中的OpenCV提供了以下代码 regions hierarchy cv2 findContours binary image cv2 RETR LIST cv2 CHAIN APPROX SIMPLE for region i
  • Android:无法找到或加载主类org.gradle.wrapper.GradleWrapperMain

    我正在尝试在 GitLab CI 上构建我的项目 但不幸的是 我在运行器中不断收到此错误 Error Could not find or load main class org gradle wrapper GradleWrapperMai
  • 如何删除/卸载嵌套的反应组件

    我想卸载单个反应组件 该组件属于总共包含三个组件的父组件 父组件有这个渲染函数 render function return div div
  • 使用 scrapy 抓取多个页面

    我正在尝试使用 scrapy 抓取多个网页 页面的链接如下 http www example com id some number 在下一页中 末尾的数字减少了1 所以我正在尝试构建一个蜘蛛 它可以导航到其他页面并抓取它们 我的代码如下 i
  • Rails 字体 CORS 政策

    我无法为 CORS 策略加载此字体 Folder app assets fonts Inter UI var woff2 Error 访问字体位于 http localhost 3000 assets Inter UI var e2e323
  • android中处理html webview的onclick功能

    我正在尝试处理 android referred 中 html 的 onclick在此输入链接描述 https stackoverflow com questions 4065312 detect click on html button
  • iOS 中如何将代码块分派到同一个线程?

    问题的主要方面 这是关于 iOS 的 我能否以某种方式分派代码块 使它们全部 a 在后台运行并且 b 在同一个线程上运行 我想在后台运行一些耗时的操作 但这些操作必须在同一线程上运行 因为它们涉及资源 而不能在线程之间共享 如果需要 更多技
  • 在 ASP.NET Core 中,如何在Configure() 中使用在ConfigureServices() 中设置的服务?

    我编写了一项有助于配置的服务 该服务在 Startup 类的 ConfigureServices 方法中设置为 public void ConfigureServices IServiceCollection services servic
  • Java JComboBox 自动完成[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • JSF 服务层

    我不确定我在 JSF 中使用 MVC 环境的方法是否是最好的方法 因为我试图充分利用 JSF 所以我想知道我的服务层 或模型 用 MVC 术语来说 应该如何 设计 我知道视图与控制器的比例应该是 1 比 1 排除例外 现在我应该以什么方式设
  • 从文件中 read() - 阻塞行为与非阻塞行为

    假设我们使用以下命令打开了一个文件fopen 并从收到的文件指针中 使用以下命令获取文件描述符fileno 然后我们做很多 gt 10 8 随机read 该文件中相对较小的块 大小在 4 字节到 10 KB 之间 这是预期的行为吗read
  • 测试有效输入 Python

    因此 我有一个完成的程序 它接受带有银行帐户信息的输入文件并对其进行解析并允许使用一些不同的实用程序 其中一个实用程序是将事务添加到 数据库 只是一个日志文件 程序提示用户输入 w 或 d 然后输入一个金额 浮点数 这代表存款或取款 X 金
  • Vstest.console.exe 找不到 nunit 测试

    我有 VS 2017 和 net 4 6 尝试使用 vstest console 通过 cmd 提示符运行时 vstest console exe bin Release Tests dll UseVsixExtensions true 我
  • 如何用css制作透明的羽毛首选项

    我想为一些图像添加羽毛 这是我想要最终得到的结果 我意识到这个问题之前已经发布过 并且我已经使用例如box shadow attr 但我对这个方法有一个问题 我要把这张照片放在webm 所以背景并不总是保持不变 这就是为什么我必须使羽毛透明
  • 如何将列表拆分为大小相等的块?

    如何将任意长度的列表拆分为大小相等的块 See also How to iterate over a list in chunks https stackoverflow com q 434287 To chunk strings see
  • 带 json 参数的 Curl GET 请求

    我正在尝试通过 cURL 从命令提示符向远程 REST API 发送 GET 请求 如下所示 curl X GET H Content type application json H Accept application json http
  • Flutter 如何将数据列表保存到本地存储

    我正在 flutter 上开发电影发现应用程序 我需要将正在播放的电影列表保存在本地存储上以供离线使用 那么我该怎么做 Future gt getNowPlayingMovies 异步 最终字符串现在正在播放 https api themo
  • 如何动态判断Objective-C属性类型?

    我正在尝试动态确定 Objective C 中属性的类型 根据我在本网站和其他地方读到的内容 我相信我正在做正确的事情 但是 我的代码不起作用 下面的代码片段演示了这个问题 尝试获取 backgroundColor 和 frame 的属性信