我正在为我的应用程序使用UICsutomSwitch。当我尝试创建它时,我得到一个例外,
由于未捕获的异常'NSRangeException'而终止应用程序,原因:' * - [NSArray objectAtIndex:]:索引2超出空数组的界限'
我的代码如下,
UICustomSwitch.h
#import <Foundation/Foundation.h>
@interface UICustomSwitch : UISwitch
{
}
-(void)setLeftLabelText:(NSString *)labelText;
-(void)setRightLabelText:(NSString *)labelText;
@end
UICustomSwich.m
#import "UICustomSwitch.h"
@implementation UICustomSwitch
-(UIView *)slider
{
return [[self subviews ] lastObject];
}
-(UIView *)textHolder
{
return [[[self slider] subviews]objectAtIndex:2];
}
-(UILabel *)leftLabel
{
return [[[self textHolder] subviews]objectAtIndex:0];
}
-(UILabel *)rightLabel
{
return [[[self textHolder] subviews]objectAtIndex:1];
}
-(void)setLeftLabelText:(NSString *)labelText;
{
[[self leftLabel] setText:labelText];
}
-(void)setRightLabelText:(NSString *)labelText
{
[[self rightLabel]setText:labelText];
}
@end
查看控制器:
UICustomSwitch* switchView=[[[UICustomSwitch alloc]initWithFrame:CGRectMake(200,5,90,30)]autorelease];
[switchView setLeftLabelText:@"F"];
[switchView setRightLabelText:@"M"];
[switchView addTarget:self action:@selector(genderAction:) forControlEvents:UIControlEventValueChanged];
[elementView addSubview:switchView];
我在“return [[[self slider] subviews] objectAtIndex:2]中遇到异常;”呼叫。我不知道有什么不对,你们可以就此提出建议。
提前致谢, Sekhar。
答案 0 :(得分:1)
异常表示您正在尝试访问超出范围的数组元素(在大于数组实际大小的位置)。
您可以使用代码中小心放置的断点和/或NSLog()调用来确定此数组是否为空 - 如果是这样,您可以继续使用这些调用来找出数组的位置变空了。
显然,如果数组为空,那么开关的设置方式与预期的不同。
答案 1 :(得分:1)
我遇到了这个问题并在此处找到了答案:Custom UISwitch Text
基本上在iOS 4中,UISwitch的子视图中有UILabel表示“On / Off”标签。在iOS 5中,子视图数组中没有UILabel(因此您得到的数组错误)。上面的链接提供了一个可以下载和自定义的外部类。在我看来,Apple似乎不鼓励定制UISwitch。您所追求的功能可以通过另一种方式完成(分段控制,模拟复选框等)。
此外,在上面给出的链接中,作者提出问题可能不包括armv6。我尝试了这个并没有解决问题。