Ошибка утверждения iOS при запуске

У меня странный сбой. Я создаю новое приложение из существующего приложения... и при изменении его с NSDocumentsDirectory на NSApplicationSupportDirectory я получаю ошибку утверждения для кода, который работает достаточно хорошо, прежде чем прикасаться к методам, связанным с NSDcoumentDirectory. Код с ошибкой находится в цветовой модели.

+(UIColor *) colorFromDashSeperatedStringRepresentation: (NSString *) dashSeperatedStr
{
    NSArray * components = [dashSeperatedStr componentsSeparatedByString:@"#"];

    assert([components count] == 4); // Assertion failure here... 

    float red = [[components objectAtIndex:0] floatValue];
    float green = [[components objectAtIndex:1] floatValue];
    float blue = [[components objectAtIndex:2] floatValue];
    float alpha = [[components objectAtIndex:3] floatValue];

    return [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
}

Как видно... есть четыре компонента. Все они перечислены как отдельные свойства. Это ошибка в логе...

Assertion failed: ([components count] == 4), function +[CAG_Color colorFromDashSeperatedStringRepresentation:], file /Users/marc/Documents/CAG/iClassNotes/iClassNotes/iClassNotes/CAG_Color.m, line 77.

Любая помощь в этом будет ОЧЕНЬ оценена!!! Я смог обойти эту ошибку только в этом новом приложении, перенеся все контроллеры во вновь созданный проект и не касаясь методов NSDocumentDirectory. Я хотел бы знать, что, черт возьми, здесь не так!

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

+(UIColor *) colorFromDashSeperatedStringRepresentation: (NSString *) dashSeperatedStr
{
    NSArray * components = [dashSeperatedStr componentsSeparatedByString:@"#"];
    NSLog(@"Components before assert: %@", components);
    if (components == NULL)
    {
        NSArray *values = @[@0.000000, @0.000000, @1.000000, @0.000000];
        components = values;
    }
    NSLog(@"Components after if: %@", components);
    assert([components count] == 4);

    float red = [[components objectAtIndex:0] floatValue];
    float green = [[components objectAtIndex:1] floatValue];
    float blue = [[components objectAtIndex:2] floatValue];
    float alpha_c = [[components objectAtIndex:3] floatValue];

    return [UIColor colorWithRed:red green:green blue:blue alpha:alpha_c];
}

Надеюсь, это поможет кому-то!


person Marc Watson    schedule 26.07.2013    source источник


Ответы (1)


Прочтите утвердить ссылку, добавьте точку останова перед утверждением (или даже NSLog(@"%@", компоненты);) и посмотреть, что происходит ;-)

person Alexander Vasenin    schedule 27.07.2013
comment
Ценю ответ... не знаю, почему я не проверял значения массива. Конечно, они показывают ноль. Да! Неудивительно, что утверждение провалилось. На самом деле это был не тот ответ, который я искал, и он не решил проблему, тем не менее, он поставил меня на правильный путь, чтобы понять, в чем настоящая проблема... почему массив пуст? - person Marc Watson; 30.07.2013
comment
Проведя некоторые дополнительные исследования и попробовав несколько вещей, я нашел пост трехлетней давности о NSArrays. Это помогло мне увидеть путь вокруг проблемы. Я добавил редактирование, которое дает решение. - person Marc Watson; 30.07.2013