NsMutableArray меняет UITableViewCellContentView без причины - PullRequest
1 голос
/ 13 ноября 2010

У меня проблема с Биссаром. В методе viewDidLoad UITableViewController у меня есть:

myfields = [NSMutableArray array];
    for (int x = 0; x < 10; x++) {
        UITextField * field = [[UITextField alloc] initWithFrame:CGRectMake(130,12,150,25)];
        field.backgroundColor = [UIColor clearColor];
        field.font = [UIFont systemFontOfSize:15];
        field.delegate = [[OptionFieldDelegate alloc] init];
        [myfields addObject: field];
    }
    NSLog(@"myfields array - %@",myfields);

Это дает такой вывод:

myfields array - (
    "<UITextField: 0x6a35b50; frame = (130 12; 150 25); clipsToBounds = YES; opaque = NO; layer = <CALayer: 0x6a35c60>>",
    "<UITextField: 0x6a36820; frame = (130 12; 150 25); clipsToBounds = YES; opaque = NO; layer = <CALayer: 0x6a367f0>>",
    "<UITextField: 0x6a374e0; frame = (130 12; 150 25); clipsToBounds = YES; opaque = NO; layer = <CALayer: 0x6a374b0>>",
    "<UITextField: 0x6a382e0; frame = (130 12; 150 25); clipsToBounds = YES; opaque = NO; layer = <CALayer: 0x6a382b0>>",
    "<UITextField: 0x6a38ea0; frame = (130 12; 150 25); clipsToBounds = YES; opaque = NO; layer = <CALayer: 0x6a38e70>>",
    "<UITextField: 0x6a39950; frame = (130 12; 150 25); clipsToBounds = YES; opaque = NO; layer = <CALayer: 0x6a39a60>>",
    "<UITextField: 0x6a3a630; frame = (130 12; 150 25); clipsToBounds = YES; opaque = NO; layer = <CALayer: 0x6a3a600>>",
    "<UITextField: 0x6a3b1f0; frame = (130 12; 150 25); clipsToBounds = YES; opaque = NO; layer = <CALayer: 0x6a3b1c0>>",
    "<UITextField: 0x6a3bdb0; frame = (130 12; 150 25); clipsToBounds = YES; opaque = NO; layer = <CALayer: 0x6a3bd80>>",
    "<UITextField: 0x6a3c970; frame = (130 12; 150 25); clipsToBounds = YES; opaque = NO; layer = <CALayer: 0x6a3c880>>"
)

Хорошо, но следующий бит - нет. Я не касаюсь этого массива до того, как мне нужно, но в - tableView: cellForRowAtIndexPath: метод у меня есть это:

NSLog(@"Array = %@",myfields);
                    NSLog(@"class - %@",NSStringFromClass([myfields class]));
                    NSLog(@"0 - %i",[indexPath row] - 2);
                    NSLog(@"1 - %@",[myfields objectAtIndex:[indexPath row] - 2]);
                    [[cell contentView] addSubview: [myfields objectAtIndex:[indexPath row] - 2]];

Это вывод:

2010-11-13 00:58:13.808 Poll Maker[1803:207] Array = <UITableViewCellContentView: 0x6a35b10; frame = (10 1; 300 43); layer = <CALayer: 0x6a3e680>>
2010-11-13 00:58:13.809 Poll Maker[1803:207] class - UITableViewCellContentView
2010-11-13 00:58:13.809 Poll Maker[1803:207] 0 - 0
2010-11-13 00:58:13.810 Poll Maker[1803:207] -[UITableViewCellContentView objectAtIndex:]: unrecognized selector sent to instance 0x6a35b10
2010-11-13 00:58:13.812 Poll Maker[1803:207] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UITableViewCellContentView objectAtIndex:]: unrecognized selector sent to instance 0x6a35b10'

Я очень смущен. Может кто-нибудь мне помочь? СПАСИБО.

Ответы [ 2 ]

4 голосов
/ 13 ноября 2010

Вы сделали ошибку управления памятью.Вы должны сохранить массив, если хотите, чтобы он оставался за пределами конца первого метода.

В вашем случае память, в которой массив был когда-то (до того, как он был выпущен пулом автоматического выпуска), была переписанас подпредставлением UITableViewCell.

1 голос
/ 13 ноября 2010

Уле Бегеманн, вероятно, нашел причину проблемы, однако, когда у вас есть проблемы с управлением памятью (селекторы, отправленные в неправильные экземпляры, являются признаком проблем с управлением памятью), вы можете сделать ряд вещей:*

  1. Перечитайте правила управления памятью Какао и убедитесь, что вы следуете им.
  2. Запустите статический анализатор .Это часто приводит к тому, что вы пренебрегали правилами управления памятью.
  3. Попробуйте использовать NSZombieEnabled, чтобы выяснить, [и когда] вы отправляете сообщения в нераспределенные экземпляры.*
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...