CALayer NAN удаляет раздел UITableView с пользовательским UItableviewCell - PullRequest
1 голос
/ 29 марта 2011

Привет, я не знаю, где искать дальше, я полностью застрял:

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

Проблема: иногда, и я не знаю, когда, когда я не могу воспроизвести его, приложение вылетает с «CALayerInvalidGeometry», причина: «CALayer positionсодержит NaN: [nan 2.03571e-10] "сообщение об ошибке.

Я искал несколько часов, но не могу найти ошибку для этого, я предоставляю еще немного кода, может кто-нибудь знает, где это происходит:

Я вызываю этот метод, чтобы выйти из режима редактирования таблицы, в котором вызывается setupDetailEditMode.

- (void)setEditing:(BOOL)editing animated:(BOOL)animated {


if(editing)
{..}
else{

        tableShowEditMode = NO;
    [self setupDetailEditMode];

    [self createPersonTableHeader];
    [self clearAllEmptyFieldsFromArray];
        [self saveUserProfile];

        [super setEditing:editing animated:animated];
        [profileTable setEditing:editing animated:YES];
......}

В этом коде я удаляю разделы ... в некоторых разделах по-прежнему есть строки, которых нетпроблема, потому что они будут удалены путем удаления раздела в следующей функции, он вылетает в последней строке:

part of function **setupDetailEditMode**:
   //Phone Section
    if(removedRowsPhone)

    {
        if(app.isitUserProfile.isitPhone.count == 0)
            [sectionOperationIndexSet addIndex:sectionWorked];

        sectionWorked++;
    }

    //Email Section 
    if(removedRowsEmail)
    {
        if(app.isitUserProfile.isitEmail.count == 0)
            [sectionOperationIndexSet addIndex:sectionWorked];

        sectionWorked++;
    }



    //update table data structur
    [self buildCurrentTableStructure];

    //delete sections <<<<<**here will crash the app sometimes**
    [profileTable deleteSections:sectionOperationIndexSet withRowAnimation:UITableViewRowAnimationFade]; 

Я добавляю произвольную произвольную ячейку, которую я использую, может быть, есть что-то неправильное, что вызываетпадение в layoutsubviews:

- (void) layoutSubviews {


    [super layoutSubviews];

    if (self.editing)
    {
        primaryField.enabled = YES;

        // (self.editing && !self.showingDeleteConfirmation)
        star1Img.frame = CGRectMake(87.0,30.0,20.0, 20.0);
        star2Img.frame = CGRectMake(111.0,30.0,20.0, 20.0);
        star3Img.frame = CGRectMake(135.0,30.0,20.0, 20.0);
        star4Img.frame = CGRectMake(159.0,30.0,20.0, 20.0);
        star5Img.frame = CGRectMake(183.0,30.0,20.0, 20.0);

        //primaryLabel.frame = CGRectMake(primaryLabel.frame.origin.x, 8.0,180.0 , 17.0);
        primaryField.frame = CGRectMake(primaryField.frame.origin.x, 8.0,180.0 , 17.0);
        secondaryLabel.frame = CGRectMake(secondaryLabel.frame.origin.x,18.0, 65.0 , 21.0);

    }
    else
    {
        primaryField.enabled = NO;

        star1Img.frame = CGRectMake(29.0,27.0,10.0, 10.0);
        star2Img.frame = CGRectMake(39.0,27.0,10.0, 10.0);
        star3Img.frame = CGRectMake(49.0,27.0,10.0, 10.0);
        star4Img.frame = CGRectMake(59.0,27.0,10.0, 10.0);
        star5Img.frame = CGRectMake(69.0,27.0,10.0, 10.0);

        primaryField.frame = CGRectMake(primaryField.frame.origin.x, 14.0,213.0 , 17.0);
        secondaryLabel.frame = CGRectMake(14.0,6.0, 65.0 , 21.0);
    }

} // layoutSubviews*/


- (void) setStarRating:(int) rating
{

    if(rating>=1)
        [star1Img setImage:[UIImage imageNamed:@"goldstar20.png"]];
......}

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

-Бево

1 Ответ

0 голосов
/ 02 сентября 2011

Я не очень внимательно изучил ваш код, но однажды у меня было что-то похожее. Был вид, который был выпущен, но действительно хотел быть нарисованным снова - в основном вещь сохранения. Трудно найти - или понять - даже через профилировщик. Вам следует проверить с помощью профилировщика, есть ли утечка в любом месте.

...