2010-03-07 63 views
0

好吧,所以我有一个UITableView,我想要应用主题。我想我已经想出了如何去做。我所做的是当我的视图加载时,我调用一个名为“[self getValues]”的函数。以下是它的外观:UIColor函数崩溃

- (void)getValues { 
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
    NSString *theme = [defaults valueForKey:@"theme"]; 
    fileName = [NSString stringWithFormat:@"%@.png", theme]; 
    textColor = [self getTextColor]; 
} 

fileName和textColor变量在标头中定义为NSString和UIColor。 fileName用于获取我分配给单元格的背景图像的文件名。我将“textColor”分配给函数[self getTextColor]的输出。这是那个功能:

- (UIColor*)getTextColor { 
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
    NSString *theme = [defaults valueForKey:@"theme"]; 

    NSArray *themes = [NSArray arrayWithObjects:@"Crash Love", @"DECEMBERUNDERGROUND", @"Sing the Sorrow", nil]; 
    NSArray *textColors = [NSArray arrayWithObjects:gold, [UIColor blackColor], [UIColor whiteColor], nil]; 

    int r; 
    UIColor *clr; 

    for (NSString *element in themes) { 
     r += 1; 

     if ([element isEqualToString:theme]) { 
      clr = [textColors objectAtIndex:r]; 
      break; 
     } 
    } 

    return clr; 
} 

但是由于某种奇怪的原因,上面的函数崩溃了。我确实知道函数中有某些东西是导致崩溃的原因,因为当我删除我称之为函数的行时,应用程序工作正常。我使用NSLog来查看我的应用程序获得的主题变量,它是“1主题”还是其他,所以这不是问题。

任何想法?

回答

0

这个怎么样,而不是:

- (UIColor*) getTextColor 
{ 
    NSDictionary* themeColors = [NSDictionary dictionaryWithObjectsAndKeys: 
     [UIColor redColor], @"Theme1", 
     [UIColor blackColor], @"Theme2", 
     [UIColor whiteCOlor], @"Theme3", 
     nil]; 

    return [themeColors objectForKey: [[NSUserDefaults standardUserDefaults] valueForKey:@"theme"]]; 
} 

的颜色都存储在一个字典,让您可以简单地通过名字进行查找。如果你经常这样称呼,那么你也可以考虑使themeColors变量为static,并且只初始化它一次。否则我不会打扰。

+0

这很好用!万分感谢! – user288225 2010-03-07 14:39:17