分段控制中的NSArray问题

时间:2011-12-04 18:02:51

标签: nsarray

我使用this example创建了一个分段视图。在我的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 may not respond to arrayByPerformingSelector.

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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"];

您可以阅读有关KVC collection operations in NSHipsters blog post的更多信息。对于一个不起眼的API,它实际上非常有用。我很难过这么久才找到它。