UISegmentedControl崩溃应用程序

时间:2014-08-12 04:17:16

标签: ios objective-c uisegmentedcontrol

创建UISegmentedControl然后将其添加到leftBarButtonItem中的代码。它在viewDidLoad

UISegmentedControl *prevNextSegment = [[UISegmentedControl alloc] init];

[prevNextSegment setImage:[UIImage imageNamed:@"up.png"] forSegmentAtIndex:0];
[prevNextSegment setImage:[UIImage imageNamed:@"down.png"] forSegmentAtIndex:1];
[prevNextSegment addTarget:self action:@selector(prevNextSegmentAction:)
        forControlEvents:UIControlEventValueChanged];
prevNextSegment.frame = CGRectMake(0, 0, 95,35);
prevNextSegment.momentary = YES;
self.prevNextSeg_ = prevNextSegment;
[prevNextSegment release], prevNextSegment = nil;



UIBarButtonItem *segmentBarItem = [[ UIBarButtonItem alloc ] initWithCustomView:self.prevNextSeg_ ];
self.navigationItem.leftBarButtonItem = segmentBarItem;
[segmentBarItem release];

访问UISegmentedControl以禁用该段的另一种方法,请使用以下代码

[self.prevNextSeg_ setEnabled:NO forSegmentAtIndex:0]; 

这行代码使应用程序崩溃。并得到像这样的例外

2014-08-12 09:31:08.386 FinApp[29694:60b] *** Terminating app due to uncaught exception 'NSRangeException',   
reason: '*** -   [__NSArrayM objectAtIndex:]: index 1 beyond bounds [0 .. 0]'

我不知道如何解决这个问题。我搜索谷歌,但没有得到适合这个问题的解决方案。

1 个答案:

答案 0 :(得分:0)

插入一些项目以显示段控件

崩溃的原因:

您在分段控件上没有任何项目。它是空的。首先,你必须在其上插入一些项目。然后尝试访问它。另一方面,崩溃将会发生。

UISegmentedControl *segmentControl = [[UISegmentedControl alloc]initWithItems:@[@"Up",@"Down"]];



if ([segmentControl numberOfSegments]>1) {

    [segmentControl setEnabled:NO forSegmentAtIndex:0];

}

如果您想稍后插入项目,请使用此方法。请参阅Apple documentation

– insertSegmentWithImage:atIndex:animated:
– insertSegmentWithTitle:atIndex:animated: