分段控制中的 NSArray 问题

发布于 2024-12-19 14:28:12 字数 1174 浏览 3 评论 0原文

我使用此示例来创建分段视图。在我的 viewDidLoad 方法中,我收到警告并且代码崩溃。

- (void)viewDidLoad {
    [super viewDidLoad];

    self.segmentedViewControllers = [self segmentedViewControllerContent];

    NSArray * segmentTitles = [self.segmentedViewControllers arrayByPerformingSelector:@selector(title)];

    self.segmentedControl = [[UISegmentedControl alloc] initWithItems:segmentTitles];
    self.segmentedControl.selectedSegmentIndex = 0;
    self.segmentedControl.segmentedControlStyle = UISegmentedControlStyleBar;

    [self.segmentedControl addTarget:self
                              action:@selector(didChangeSegmentControl:)
                    forControlEvents:UIControlEventValueChanged];

    self.navigationItem.titleView = self.segmentedControl;
    [self.segmentedControl release];

    [self didChangeSegmentControl:self.segmentedControl]; 
}

我在这一行收到警告:

NSArray * segmentTitles = [self.segmentedViewControllers arrayByPerformingSelector:@selector(title)];

NSArray 可能不会响应 arrayByPerformingSelector。

I used this example to create a segmented view. In my viewDidLoad method I am getting a warning and code crashes.

- (void)viewDidLoad {
    [super viewDidLoad];

    self.segmentedViewControllers = [self segmentedViewControllerContent];

    NSArray * segmentTitles = [self.segmentedViewControllers arrayByPerformingSelector:@selector(title)];

    self.segmentedControl = [[UISegmentedControl alloc] initWithItems:segmentTitles];
    self.segmentedControl.selectedSegmentIndex = 0;
    self.segmentedControl.segmentedControlStyle = UISegmentedControlStyleBar;

    [self.segmentedControl addTarget:self
                              action:@selector(didChangeSegmentControl:)
                    forControlEvents:UIControlEventValueChanged];

    self.navigationItem.titleView = self.segmentedControl;
    [self.segmentedControl release];

    [self didChangeSegmentControl:self.segmentedControl]; 
}

I am getting a warning in this line:

NSArray * segmentTitles = [self.segmentedViewControllers arrayByPerformingSelector:@selector(title)];

that NSArray may not respond to arrayByPerformingSelector.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

挽袖吟 2024-12-26 14:28:12

arrayByPerformingSelector: 不是发送到 NSArray 的有效消息。该方法可能位于原始代码使用的 NSArray 类别扩展之一中。检查您所关注的原始示例,并尝试查找 arrayByPerformingSelector: 的定义位置,然后在代码中#import 该文件。

arrayByPerformingSelector: is not a valid message to be sent to NSArray. This method is probably in one of the category extensions of NSArray that the original code uses. Check the original example you are following and try to find where arrayByPerformingSelector: is defined, then #import that file in your code.

初见你 2024-12-26 14:28:12

arrayByPerformingSelector: 是有人编写的一种便利方法,以避免这样做:

NSMutableArray * tempArray = [NSMutableArray array];

for (id thing in things)
{
     [tempArray addObject:thing.name];
}
NSArray * namesOfthings = [tempArray copy];

但是,iOS 堆栈中已经有一些东西可以免费执行此操作!

NSArray * namesOfthings = [things valueForKeyPath:@"unionOfObjects.name"];

您可以在NSHipsters 博客文章中阅读有关 KVC 收集操作的更多信息。对于一个不起眼的 API 来说,它实际上非常有用。我很遗憾我花了这么长时间才找到它。

arrayByPerformingSelector: is a connivence method someone has written to avoid doing this:

NSMutableArray * tempArray = [NSMutableArray array];

for (id thing in things)
{
     [tempArray addObject:thing.name];
}
NSArray * namesOfthings = [tempArray copy];

However, there is already something in the iOS stack that will do this for free!

NSArray * namesOfthings = [things valueForKeyPath:@"unionOfObjects.name"];

You can read more about KVC collection operations in NSHipsters blog post. For an obscure API it's actually really useful. I am sad it took me this long to find it.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文