问题标签 [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 投票
1 回答
1770 浏览

objective-c - 这是一个理智的 Objective-C 块实现吗?

我想要一个 NSRegularExpression– stringByReplacingMatchesInString:options:range:withTemplate:方法的变体,它采用块而不是模板。块的返回值将用作替换值。正如您可以想象的那样,这比模板更灵活。有点像/e在 Perl 正则表达式中使用修饰符。

所以我写了一个类别来添加方法。这就是我想出的:

这是我第一次尝试在 Objective C 中玩积木。感觉有点奇怪,但似乎效果很好。不过,我有几个问题:

  1. 这似乎是实现这种方法的明智方法吗?
  2. 有没有办法使用它来实现它的内部-enumerateMatchesInString:options:range:usingBlock: ?我试过了,但无法pos从块内分配。但是如果有办法让它工作,那么传递 NSMatchingFlags 和 BOOL 并以与该方法相同的方式处理它们会很酷。可以吗?

更新

感谢 Dave DeLong 的回答,我有了一个使用块的新版本:

效果很好,谢谢!

0 投票
1 回答
656 浏览

iphone - 向所有 UIViewController 添加变量

我有这个类(我们称之为FooViewController),它是UIViewController. 它的行为应该类似于 a UINavigationController,因为存在 arootController并且您可以向其中添加其他UIViewControllers。并且每个UIViewController内部FooViewController都可以创建另一个UIViewController并将新推UIViewControllerFooViewController.

这是我的意思的一个例子。这是您在项目中添加新代码时自动创建的代码UITableViewController

问题来了:我怎样才能navigationController在我的所有UIViewControllers 中都有一个变量?就像您可以使用类别向现有类添加方法一样,您也可以向现有类添加变量吗?听起来关联引用是我正在寻找的东西,但它只在 Mac 上可用。

一种对我有用的解决方案是将UIViewController我可能使用的所有 s 子类化,并将我的实际类从这些子类中分离出来。例如,我可能会这样做:

这样我就可以做到:[self.fooViewController pushViewController:detailViewController];。但这似乎是一种肮脏的做法。

我觉得这不应该是一件难事,也许我想错了。有什么想法吗?谢谢!

0 投票
2 回答
7582 浏览

iphone - iPhone:具有属性的类别+“发送到实例的无法识别的选择器”异常

首先,我看到有很多关于“无法识别的选择器发送到实例”问题的问题。
我见过很少,但没有看到有关访问类别属性中定义的内容...

我在 UILabel 上有一个带有属性的类别。
定义了 getter 和 setter。
实际上,我在 2 个不同的类别中有相同的属性(对于 2 个不同的类:UIButton 和 UILabel)。
问题是我可以为 UIButton 访问此属性,但不能为 UILabel 访问此属性。
一旦我尝试访问 UILabel(text) 类别中的任何方法/属性,它就会删除“-[UILabel 测试]:无法识别的选择器发送到实例 0x4e539f0”异常。

两个类别文件均已导入。

我不知道是什么问题。

这是一些代码:

任何帮助将不胜感激。
我不知道可能的问题...

谢谢你。

迈克尔。

0 投票
2 回答
1485 浏览

ios - 关于 Object-C 中的类别:覆盖已存在的消息

类别是子类化的替代方案。如果类别消息已经在类中实现,会发生什么。以 UIViewController 为例,

因此,如果我们得到任何扩展 UIViewController 的 XXViewController,是否会像上面那样实现默认消息?

正如你所看到的,我的目标是让所有 XXViewController 都支持景观,所以使用类别来达到这个目的。

实际上,传统策略将使用子类,并且有效。类别方式如何?

谢谢

0 投票
2 回答
1223 浏览

objective-c - 使用类别在 Objective C 类中添加冲突方法

我已经在与类的原始定义不同的foo类别中添加了一个方法。然后我添加了另一个在另一个类别中调用的方法。然后我调用. 在我的情况下,正在调用in 。我的问题是:对此有什么解释吗?或者,它是那些“未定义”/“编译器相关”行为之一。此外,是否可以通过指定要在调用中使用的类别来限定方法调用来处理这种情况。MYCustomClassCategory1fooCategory2fooMYCustomClassfooCategory2

编辑:我知道我正在做的事情不受支持。我只是对它周围是否有黑客感兴趣。

0 投票
1 回答
353 浏览

objective-c - 如何在 Objective-C 中的子类上使用类别方法

添加到特定类的类别方法在其子类中不起作用。

对我来说,我使用JSONKit来操作 JSON。JSONKit 返回JKArray子类化NSArray。我有几种方法添加到NSArray. 但是当我执行我的程序unrecognized selector sent to instance时,该方法引发了运行时异常。

如何使用类别方法?

0 投票
4 回答
3891 浏览

objective-c - 类别中的私有方法,使用匿名类别

我正在创建一个基于 NSDate 的类别。它有一些实用方法,不应该是公共接口的一部分。

我怎样才能将它们设为私有?

在类中创建私有方法时,我倾向于使用“匿名类别”技巧:

但它似乎不适用于另一个类别:

在类别中拥有私有方法的最佳方式是什么?

0 投票
2 回答
2232 浏览

objective-c - 带有 + 的 Objective-C 类名

一个类名,比如说UIImage+Somethingor UIImageView+Somethingelse,是否意味着它的行为就像一个自定义UIImageor UIImageView

0 投票
3 回答
542 浏览

objective-c - 协议和警告的类别“类不实现协议”

好吧,我有这两个协议:

并上课

我想将协议方法的实现放在单独的文件(类别)中,以免弄乱主实现文件。例如,用于实现 ivAuthorizationProtocol 的类别的标头如下所示:

所以,问题是 - 我怎样才能摆脱我在主实现文件中得到的警告?如何告诉编译器符合协议的方法位于类别中?提前致谢!

0 投票
2 回答
352 浏览

objective-c - 供 NSCalendar 内部使用的 Objective-C Singleton 类别

我有一个两部分的问题。首先,如何在 Obj-C 中创建 Singleton 类别?它只是供内部使用,所以它不必是万无一失的单例。其次,我可以在 NSCalendar 上创建这个类别并让单例成为 autoupdatingCurrentCalendar 吗?考虑到用户在使用应用程序时可能会更改时区,这是否安全?我想避免在每次需要时创建一个 NSCalendar 实例(因为它用于 tableviewcells),但我不想遇到时区问题。