Cocoa - loadNibNamed:owner:topLevelObjects: 来自加载的包

2023-12-01

在基于文档的 Cocoa 应用程序中,我使用以下方法实例化外部包中的多个对象(插件):

- (NSMutableArray *)getPluginsOfType:(Class)type;
{
    NSBundle *main = [NSBundle mainBundle];
    NSArray *allPlugins = [main pathsForResourcesOfType:@"bundle" inDirectory:@"../PlugIns"];

    NSMutableArray *availablePlugins = [NSMutableArray array];

    for (NSString *path in allPlugins)
    {
    NSBundle *pluginBundle = [NSBundle bundleWithPath:path];
    [pluginBundle load];
    Class principalClass = [pluginBundle principalClass];
    [availablePlugins addObject:principalClass];
    }
return availablePlugins;
}

在每个文件中,都会在 init 时加载一个 nib 文件,它将根视图与我的插件类中的属性绑定在一起。下面是最小的插件类定义:

@interface Plugin

@property (strong) IBOutlet NSView *thePluginView;

@end

@implementation Plugin

- (instancetype)init
{
    self = [super init];
    if (self)
    {
        [NSBundle loadNibNamed:@"NibName" owner:self];
    }
    return self;
}

@end

虽然这工作正常,但我想替换上面对 NSBundle 的调用(因为 OS X 10.8+ 已弃用它),并将其替换为:

[[NSBundle mainBundle] loadNibNamed:@"NibName" owner:self topLevelObjects:nil];

但是,在这种情况下使用 mainBundle 自然无法在我的插件类中设置顶级对象引用,我怀疑原因 mainBundle 与插件的包无关。

我将如何实现这一目标?有没有办法找到“当前”包(可以说,插件类来自的包)?

Thanks.


我不清楚你到底在问什么 - 不在你的应用程序包中的“加载类”来自哪里,以及“加载类”到底是什么意思?

也许以下内容会有所帮助:

loadNibNamed:owner:topLevelObjects:是一个实例方法,从实例代表的包中加载。

在您的示例中,您使用的实例通过以下方式获得[NSBundle mainBundle],因此笔尖是从应用程序主包加载的。

没有“当前捆绑包”概念,但您可以获得NSBundle代表其他捆绑包的实例,例如和NSBundle的类方法bundleWithURL。因此,要从不同的包加载笔尖,首先创建一个NSURL引用该包,然后创建一个NSBundle在此基础上,最后加载笔尖。

HTH

附录 - 问题更新后

从已弃用的+loadNibName:owner:方法的描述owner:

如果该对象的类有关联的包,则在该包中搜索指定的 nib 文件;否则,此方法将在主包中查找。

这是您使用时需要复制的内容-loadNibNamed:owner:topLevelObjects:。你需要的方法是NSBundle's bundleForClass:它返回NSBundle动态加载类的对象。

所以在你的Plugin类,你应该能够找到它加载的包[NSBundle bundleForClass:[self class]]然后打电话-loadNibNamed:owner:topLevelObjects:关于这一点。

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

Cocoa - loadNibNamed:owner:topLevelObjects: 来自加载的包 的相关文章

  • 释放 Core Foundation 对象引用

    我是否需要释放 Core Foundation 对象来清理内存 如果是这样 怎么办 例如 在代码中 ABAddressBookRef addressBook ABAddressBookCreate CFArrayRef peopleArra
  • NSDictionary 上的 NSPredicate

    我试图根据字母表在表格视图中创建部分 并在这些部分下按字母顺序对我的条目进行排序 我已经收集了 bandArrayIndex 中 bandArray 每个条目的第一个字母 现在我尝试使用 NSPredicate 来计算每个字母有多少个 我正
  • 最小的 iOS 蓝牙管理器示例

    我一直在构建一个最小的示例 用于使用 iOS 5 0 中的 BluetoothManager 私有框架来检测附近的蓝牙设备 使用此问题中找到的答案 寻找触手可及的通用蓝牙设备 https stackoverflow com question
  • 是否有适用于 iPad 2 的条码扫描仪 SDK? [关闭]

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

    基本上我正在尝试在 Cocoa Swift 中使用 AVPlayer 播放 m3u8 HLS Live Stream 我对这门语言比较陌生 所以基本上掌握了一些示例代码 http qiita com ono matope items 23d
  • 如何将 UILabel 的值绑定到实例变量?

    我是 mac objective c 的新手 我的问题是 我想知道是否可以将 UILabel 文本绑定到变量 而不必在值更改时手动设置文本 例如 在 Mac OS 上 当我打开新的 Finder 窗口并删除文件时 任务栏中的全局可用空间就会
  • 覆盖层不与 UITableView 一起滚动 - iOS

    我有一个 UITableView 类 它使用以下方法在转到下一个屏幕时调用加载覆盖 问题是这个加载屏幕不随列表滚动 所以如果你滚动一点并单击某些东西 加载屏幕不会显示 因为它位于顶部 如何让加载屏幕始终保持在 UITableView 的顶部
  • Objective-C – 拥有包含 TestFlight SDK 的 TestFlight 配置

    我已按照 TestFlight 的说明复制 发布 配置 我还使用 TestFlight SDK 从我的应用程序获取实时报告 通过这样做 我必须在我的应用程序中包含一些 TestFlight 代码 当然 我不想在我的应用程序的发布版本中包含此
  • 在 Objective C 的类方法中引用类本身

    我希望我没有跳过 ObjC 手册中的这一部分 但是是否可以从类的一个类方法中引用该类 就像在 PHP 中一样 您将使用 this 来引用当前实例 而 self 引用实例的类 this 的 ObjC 等价物将是 self 那么 PHP 的 s
  • 如何将 ios7 通用应用程序升级到基于 Xcode 6 的通用故事板应用程序?

    我目前有一个基于 xcode 5 ios 7 的通用应用程序 因此有两个故事板 我正在考虑将其更新到 ios 8 有没有办法 最佳方法将两个故事板迁移到通用的单个故事板 我在 xcode 6 中看不到转换选项 None
  • PFQueryTableViewController 错误

    我正在遵循在线教程 使用 Parse 作为后端创建照片共享应用程序 我已经运行了两次教程 两次都从头开始创建应用程序 但在同一位置仍然出现相同的错误 我到处寻找解决方案 但仍然没有运气 我正在使用 PFQueryTableViewContr
  • Cocoa - 捕获 NSStatusItem 鼠标悬停事件

    当用户的鼠标悬停在我的 NSStatusItem 上时 如何执行函数 如果您分配自定义NSView给你的NSStatusItem s view属性 您可以覆盖NSResponder方法mouseEntered mouseMoved and
  • 如何删除 UITableView 中的缩进?

    首先 我对此很陌生 我很可能忘记了一些非常简单的事情 问题 我正在制作一个应用程序 在 a 中显示来自 imgur com 的随机图像tableView 由于某种原因 所有单元格都会缩进少量 如下图所示 我摆弄了许多设置storyboard
  • 未知异常和崩溃

    当我尝试快速滚动表格视图或从远程重新加载数据时 我的应用程序崩溃了 当我先进行远程获取然后滚动表格视图时 一切似乎都工作正常 我不知道下面的崩溃日志意味着什么 它只是有时工作正常 有时崩溃 Incident Identifier 710A1
  • 从现有坐标地图套件中查找最近的位置

    我正在为拥有多家商店的客户开发 iPhone 应用程序 目标 C 我有数组中所有商店 20 的坐标 纬度 长 目前我正在考虑循环遍历商店坐标数组并获取从用户当前位置到商店位置的距离 然后将它们添加到数组中并按最小距离进行排序 这是正确的方法
  • 无法将项目添加到 NSMutableArray ivar

    我的目标是将字符串添加到数组中 并在我调用的方法中执行此操作 在这个方法中 我在数组中得到一个空值 但不知道为什么 我在课程开始时有这样的内容 NSMutableArray listOfEvents 以及我在每个事件上调用的方法 void
  • 诊断和仪器均缺少“僵尸”选项

    运行 Xcode 4 0 2 Zombie 选项丢失 其他 SO 帖子建议找到它的两个地方 Product gt Run looks like this Product gt Profile looks like this 奇怪的是 我之前
  • 在可可中将 NSMutableArray 写入文件时出现问题

    一个真正的初学者问题 我有一个 NSView 子类 在其中创建一个包含 NSValues 的 NSMutableArray 当我想使用 writetofile atomatically 将数组写入文件时 文件已创建 但它不包含可变数组所包含
  • Glib 在 iPhone 应用程序中的使用

    我想基于现有的开源 Objective C 框架开发一个 iPhone 应用程序 但是该框架广泛使用了 glib 库 我找不到一种方法来构建和包含 iPhone 应用程序的 glib 库 非越狱 有什么办法可以做到这一点 或者有没有推荐的方
  • UIViewController 内的 UIsearchController 使用自动布局

    有没有人成功实施过UIViewController其中包含两个UISearchController searchBar and a UItableView使用自动布局来布局所有内容 我正在尝试实现类似的目标1密码 https itunes

随机推荐

  • MVC 中的绑定集合

    我有一个视图模型 其中包含Applicant对象和一个TeamMember收藏 当我将模型发回时 团队集合始终为空 我尝试过更改原始集合IEnumarable to a List但这并没有什么区别 所以我更改了控制器编辑操作以接受FormC
  • pthread中两个线程之间的通信

    我正在创建两个线程 thread1 和 thread2 线程 1 正在读取模拟值 线程 2 应处理线程 1 中读取的模拟值并设置 PWM 参数 到目前为止我所做的是 在主文件 我在其中创建线程 中声明了一个全局变量 用于存储模拟值 并将指向
  • 无法在android中使用httpconnection进行连接

    我使用的是android 2 3 3 我制作了一个RSS阅读器 效果很好 然后我将这个简单的RSS阅读器的代码集成到另一个活动中 只需小心地复制粘贴它 没有错误 问题是当我在模拟器上运行应用程序时 它给我错误连接异常 然后我通过在 try
  • 哪个控件更适合下面所示的输出?

    在我对数据库和代码进行一些更改之前 我的项目运行良好 变更前 Output Tile1 Tile7 Tile N x Tile2 Tile8 Tile N x 1 Tile3 Tile9 Tile4 Tile10 Tile5 Tile11
  • 在 OS 10.12 中使用 PDF Kit 添加 pdf 注释

    现在最新的os10 12操作系统 PDF注释可以显示了 但是现在我还有一个问题 我之前在PDFView gt mouseDragged中记录了坐标信息 然后自动会调用PDFView gt drawPage函数 这个函数我会绘制 NSBezi
  • 在定义字段之前无法引用该字段,但前提是您没有限定它[重复]

    这个问题在这里已经有答案了 我发现下面的代码让我惊掉了下巴 public class MCVE instance initializer System out println test cannot reference a field be
  • 从 MVC 2.0 代码转换为 razor 语法

    我正在尝试将流行的 asp net MVC 2 0 solr net 示例应用程序代码转换为 Razor 语法 我无法理解最后一行 请帮忙 span span a href ps a
  • 为什么显式删除构造函数而不是将其设为私有?

    我何时 为什么要显式删除我的构造函数 假设原因是为了阻止其使用 为什么不直接制作它private class Foo public Foo delete 怎么样 deleted constructor class Foo public Fo
  • 使用 ViewModel 实体上的 DataAnnotation 进行 Prism IDataErrorInfo 验证

    我正在使用 Prism MVVM 框架在 WPF 中实现数据验证 我在 ViewModel 中使用绑定到表示层的干净数据实体
  • emberjs 追加有效,但引发断言失败错误

    我是 ember 新手 我正在尝试将一个模板附加到另一个模板 它似乎可以工作 但会引发错误 您能解释一下原因吗 错误 Assertion failed You cannot append to an existing Ember View
  • Javascript构造函数返回值[重复]

    这个问题在这里已经有答案了 考虑以下代码 function Foo return something var foo new Foo 根据 JavaScript 专家的说法 他们说构造函数返回 无 或仅返回 this 这是什么原因呢 我知道
  • Angular 2 组合表单验证

    我想知道如何在 Angular2 中与控制组中的 OR 语句进行组合验证 例如 我有三个输入字段 我想将 1 个输入字段设置为必填项 将另外两个输入字段设置为 OR 之类的必填项 输入姓名 必填 输入电子邮件 或 输入电话 必填 this
  • 在 EF 代码中删除首先会导致导航属性设置为 null 和空

    当我首先使用 EF 代码执行删除时 我注意到一些有趣的事情 我使用以下域模型 public class User public virtual long Id get set public virtual string Name get s
  • HTMLCollection 出现在控制台中,包含许多元素,但长度为 0

    我试图抓取页面上的一堆 span 元素 其格式如下 div class ca evp1 te style color 2952A3 span class te t 11am nbsp span span class te s Antoine
  • 参考:类型错误:无法从未定义中读取属性[此处的属性名称]

    源自TypeError Cannot call method read property set property of null in Google Apps Script 的规范问题 建议参考以下问题 Why the 项目中GS文件的执
  • Aurelia CLI & TypeScript & MomentJS

    我没有让 Aurelia CLI 和 TypeScript 和 MomentJS 一起工作 我已经看到了 Aurelia 和 Moment 问题的解决方案 但他们不使用 Aurelia CLI 这就是我现在正在做的事情 使用 Aurelia
  • ReentrantLock 不起作用

    我不明白为什么代码不能正常工作 问题是 ReentrantLock 不会锁定 ThreadClass run 中的方法调用 假定其方法被锁定在 ThreadClass 中的资源类 public class ResourceClass pri
  • Jquery 根据输入值显示输入文本

    我的 jquery 面临着基于输入值显示输入文本的问题 这是 JS 小提琴演示 http jsfiddle net Ltapp 364 当我尝试输入 hotmail时 输入框会显示 但是当我想在 hotm输入框中输入一些文本时 它会再次隐藏
  • 如何隐藏折线图中数据点的标签

    请参考下图 基本上我有一个 C 图表控件 上面有一些系列 我有一个带标签的系列 图中的红线 但我希望能够打开 关闭标签 那可能吗 我找不到任何可以这样做的属性 多谢 缺少清除文本labels一种简单的方法是使颜色透明 你可以为整体做到这一点
  • Cocoa - loadNibNamed:owner:topLevelObjects: 来自加载的包

    在基于文档的 Cocoa 应用程序中 我使用以下方法实例化外部包中的多个对象 插件 NSMutableArray getPluginsOfType Class type NSBundle main NSBundle mainBundle N