UICustomSwitch的问题,

时间:2011-06-06 05:57:35

标签: ios4

我正在为我的应用程序使用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。

2 个答案:

答案 0 :(得分:1)

异常表示您正在尝试访问超出范围的数组元素(在大于数组实际大小的位置)。

您可以使用代码中小心放置的断点和/或NSLog()调用来确定此数组是否为空 - 如果是这样,您可以继续使用这些调用来找出数组的位置变空了。

显然,如果数组为空,那么开关的设置方式与预期的不同。

答案 1 :(得分:1)

我遇到了这个问题并在此处找到了答案:Custom UISwitch Text

基本上在iOS 4中,UISwitch的子视图中有UILabel表示“On / Off”标签。在iOS 5中,子视图数组中没有UILabel(因此您得到的数组错误)。上面的链接提供了一个可以下载和自定义的外部类。在我看来,Apple似乎不鼓励定制UISwitch。您所追求的功能可以通过另一种方式完成(分段控制,模拟复选框等)。

此外,在上面给出的链接中,作者提出问题可能不包括armv6。我尝试了这个并没有解决问题。