问题标签 [objective-c-category]

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 投票
4 回答
18208 浏览

objective-c - 何时使用类别以及何时使用子类化?

谁能告诉我在 Objective-C 中何时使用类别以及何时使用子类化?也请告诉我它们的优点和缺点。

0 投票
1 回答
194 浏览

objective-c - 用户定义委托不起作用?

我尝试实现用户定义委托。为此我做了这段代码

在此编码中,我的意图是当我单击按钮时,执行相应的操作(-(IBAction)DelegateFunction:(id)sender),然后我想调用 AppImageDidLoad 委托方法,但在我的编码中这不起作用,1)为什么这不起作用,我做错了吗?谢谢你的重播

0 投票
1 回答
1148 浏览

objective-c - 覆盖 keyDown:在 NSTableView 类别中禁用箭头键处理

我有一个NSTableView并且我对它的默认行为有一些问题。

如果我keyDown:在一个类别中重写了方法,如下所示:

我无法再使用键盘箭头键更改行选择。这是为什么?

0 投票
2 回答
4047 浏览

objective-c - 未加载 Objective-C 类别 - 如何调试它

我有两个RestKit 框架的项目。

一旦使用了 RestKit 框架,一个项目可以正常工作,但另一个项目会失败。

我发现失败的代码是这样的:

MD5方法是一个类别方法,并像这样导入:

但是,在一个项目中,我不断收到以下错误:

我了解类别的基础知识,并且可以在运行时加载它们,但我不明白为什么在这种情况下没有加载类别。

这些是 github 上的文件:NSString+MD5.mNSString+MD5.h

0 投票
1 回答
1502 浏览

ios - 如何隐藏 UITabBar 并显示 UIToolBar?

我阅读了这个问题的几个答案,但不知道该怎么做。我正在使用带有 ARC 的 Xcode 4.2 并且没有情节提要。

我正在开发一个基于 TabBar 应用程序模板的应用程序并将其扩展为包含 4 UITabBars。我没有使用UINavigationController,而是UINavigationBar在状态栏旁边使用。当应用程序加载显示的第一个选项卡时,我在 上有一个按钮UINavigationBar,当我按下它时,我想隐藏UITabBarUIToolBar在 所在的同一位置显示UITabBar

我尝试使用 hidden 属性隐藏和显示(隐藏UITabBar和显示UIToolBar)。发生的事情是UITabBar隐藏的,但显示在之前UIToolBar显示的位置上方。UITabBar这看起来很难看,我希望它显示在屏幕的最底部。

我想我不能使用hidesBottomBarWhenPushed,因为我不使用 aUINavigationController而是直接使用导航栏。

另外,我想恢复显示并在按下相同按钮时UITabBar隐藏.UIToolBarUINavigationBar

0 投票
2 回答
313 浏览

objective-c - 寻找有关如何管理大型 UIViewController 类的代码的良好指南

我一直在做我的第一个 XCode/iOS 项目,到目前为止,这是一次愉快的经历。目前,我正在处理一个 Nib 文件,该文件充当其他视图的主要显示。在这个 Nib 文件中,我有一个主 UIView,在它旁边我正在设计一系列其他七个视图。在运行时,我会在必要时在容器 UIVie 中交换这七个视图,该容器位于我的主 UIView 上。

在我在 IB 中设计的 8 个视图中,我有大量的按钮、图像和其他需要链接到 IBOutlets 的对象。随着这个项目变得越来越大,如果我可以将我的类拆分到多个代码文件中会很有帮助。

使用类别是解决方案,但是,我遇到了一个烦恼——当我尝试在我的一个类别标题中创建一个 IBOutlet 时,XCode 编译器不断给我关于 ivars 和 outlets 的错误和警告。在我的 Nib 中,我有大量需要插座的对象,如果可能的话,我宁愿不必在一个巨大的代码文件中定义所有这些对象。

但是,我知道我必须在我的限制范围内工作,所以我的问题与询问如何将 IBOutlet 添加到类别有点不同。相反,我想知道在多个代码文件中拆分大型 UIViewController 类的最佳实践是什么?在使用界面设计时,objective-c 的限制是什么?构建代码的最佳方式是什么?

我的代码还不是很笨拙,但我真的很想开始重组它,这样当它由 100 条方法和 1,000 行代码组成时,它会更易于管理。

任何指针都会有所帮助。谢谢!

0 投票
1 回答
305 浏览

objective-c - 全局变量的“静态”关键字 - 范围限制在什么范围内?

使用关键字 static 为在任何范围之外声明的变量添加前缀可防止该变量被外部访问。但是,它是否限制了使用它的类别的范围?

0 投票
1 回答
1033 浏览

iphone - 无法识别 Ivar 的类别

我的应用程序中有一个相当大的视图控制器,我想通过将一些功能分成几类来清理它。我阅读了如何实现一个类别并拥有:

作为我的 .h(该类别称为 StatsVC+TableViewDelegate)。我的实现是这样开始的:

在该类别中,我多次访问原始类的 iVar 变量。我已阅读并认为这是允许的,但每次在该类别中使用 iVar 时,我都会收到以下错误消息:

'Use of undeclared identifier 'iVar'

有谁知道为什么会这样?

谢谢,

0 投票
1 回答
302 浏览

cocoa - Mac OS X 10.7.3 添加 -[NSDictionary stringForKey:] 方法?

我有报告,经我确认,我的一个应用程序中的一项功能在 10.7.3 下中断。经调查,10.7.3 似乎-stringForKey:NSDictionary.

[NSDictionary respondsToSelector:@selector(stringForKey:)]正如人们所期望的那样,返回 NO。

但是我有一个类别方法NSDictionary来实现一个-stringForKey:方法,如下(所以它也可以用于NSNumberNSDate值)。在 10.7.2 及更早版本下,它工作正常;在 10.7.3 下,它返回 nil。直接获取对象和描述可以正常工作。所以一定是类别冲突。

尽管我从 Apple Application Frameworks Evangelist 获得了建议,但我想这是另一个支持为类别方法添加前缀的论点。

其他人可以证实这一点吗?我不认为这是第三方应用程序冲突;我认为这是 10.7.3 的变化。

0 投票
6 回答
3089 浏览

objective-c - 将同一类别添加到多个类

我有一个 Objective-C 类别,我想将其添加到多个类中,而无需复制该类别中包含的代码。我只是想将相同的方法添加到多个类。

NSManagedObject我在子类 ( Book, Chapter, )上有现有类别Page,我想以一种干净且可维护的方式在这些子类中添加通用功能。

一种方法是将类别添加到它们的NSManagedObject公共超类NSManagedObjectBookChapterPage

另一种解决方案是子类化NSManagedObject,然后从该子类继承BookChapter和继承。这是最干净、最直接的方法。这种方法的最大缺点是当数据模型发生变化并且 Xcode 重新生成子类时,它会将它们重置为继承自而不是. 如果可能的话,我想避免使用类似 mogenerator/Xmo'd 的东西。PageNSManagedObjectNSManagedObjectSubclassedManagedObject

是否可以在不重复代码的情况下在多个类上添加单个类别?

谢谢。