Проблема с UICustomSwitch, - PullRequest
0 голосов
/ 06 июня 2011

Я использую 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 ]

1 голос
/ 05 января 2012

Я столкнулся с этой проблемой и нашел ответ здесь: Пользовательский текст UISwitch

В основном в iOS 4 были UILabel в подпредставлениях UISwitch, которые представляли ярлыки «On / Off»,В iOS 5 нет UILabels в массиве subviews (отсюда и ошибка массива, которую вы получаете).Приведенная выше ссылка предлагает внешний класс, который вы можете скачать и настроить.На мой взгляд, похоже, что Apple препятствует настройке UISwitch.Функциональность, к которой вы стремитесь, может быть реализована другим способом (сегментированное управление, имитированный флажок и т. Д.).

Кроме того, в приведенной выше ссылке автор предполагает, что проблема может быть связана с отсутствием armv6.Я пытался это, и это не решает проблему.

1 голос
/ 16 сентября 2011

Исключение указывает, что вы пытаетесь получить доступ к элементу массива, который находится за пределами (в месте, которое больше, чем фактический размер массива).

Вы можете использовать точки останова и / или вызовы NSLog (), аккуратно помещенные в ваш код, чтобы определить, является ли этот массив когда-нибудь не пустым, и если это так, вы можете продолжать использовать эти вызовы, чтобы выяснить, где находится массив становится пустым.

Ясно, что если массив пуст, то переключатель настроен иначе, чем вы ожидаете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...