2013-07-26 4 views
0

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

+(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]; 
} 

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

ответ

1

Read assert reference, добавить точку останова перед тем утверждают (или даже NSLog (@ «% @», компоненты);) и посмотреть, что происходит ;-)

+0

Цените ответ ... не знаю, почему я Бесполезный 't проверить значения массива. Конечно, они показывают нуль. Duh! Неудивительно, что утверждение потерпело неудачу. На самом деле это был не тот ответ, который я искал, и он не разрешил проблему, но он поставил меня на правильный путь, чтобы выяснить, какова реальная проблема ... «Почему массив пуст?» –

+0

После нескольких дальнейших исследований и попыток несколько вещей я нашел сообщение от 3 лет назад о NSArrays. Это помогло мне увидеть путь вокруг проблемы. Я добавил редактирование, которое дает решение. –

Смежные вопросы