我使用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.
答案 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,它实际上非常有用。我很难过这么久才找到它。