在tableView函数中,NSArray给出了奇怪的警告

时间:2014-03-03 21:57:34

标签: ios objective-c uicolor

我使用此常量将rgb转换为UIColor

#define UIColorFromRGB(rgbValue) [UIColor colorWithRed:((float)((rgbValue & 0xFF0000) >> 16))/255.0 green:((float)((rgbValue & 0xFF00) >> 8))/255.0 blue:((float)(rgbValue & 0xFF))/255.0 alpha:1.0]

我在我的

中使用它
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

喜欢这样

cell.textLabel.textColor = UIColorFromRGB(colours[indexPath.row]);`

颜色定义为:

colours = [[NSArray alloc]
           initWithObjects: @[@0x808000,@0x008080,@0x9999FF,@0x008080,@0x993366,@0xFFFF99,@0xFF8080,@0x0066CC,@0x008080,@0xFF99CC,@0x3366FF,@0x99CC00,@0x969696,@0xFF9900,@0x993300] , nil ];

我收到错误二进制表达式的无效操作数('id'和int) 强烈建议不要使用警告位掩码来内省Objective-C对象指针

任何帮助?

3 个答案:

答案 0 :(得分:2)

您的colours数组包含NSNumber个对象,因此您必须转换它们 UIColorFromRGB()所期望的普通整数:

cell.textLabel.textColor = UIColorFromRGB([colours[indexPath.row] intValue]);

(注意NSArray和其他集合类只能存储Objective-C对象,以及 @0x808000[NSNumber numberWithInt:0x808000]的快捷方式。)

答案 1 :(得分:1)

您必须在index:

传入对象的整数值
cell.textLabel.textColor = UIColorFromRGB([colours[indexPath.row] intValue]);

答案 2 :(得分:1)

我以这种方式找到了解决方案:

  1. 首先按以下方式使用Intitalize颜色代码数组:

    colors = [[NSArray alloc]
           initWithObjects: @"0x808000",@"0x008080",@"0x9999FF",@"0x008080",@"0x993366",@"0xFFFF99",@"0xFF8080",@"0x0066CC",@"0x008080",@"0xFF99CC",@"0x3366FF",@"0x99CC00",@"0x969696",@"0xFF9900",@"0x993300", nil ];
    
  2. UITableView的CellForRowAtIndexPath方法中的第二个。写下面的代码:

    NSString *colorCode = [colors objectAtIndex:indexPath.row];
    
    // Convert Color to RGB
    NSScanner *scanner2 = [NSScanner scannerWithString:colorCode];
    unsigned baseColor1;
    [scanner2 scanHexInt:&baseColor1];
    CGFloat listviewred   = ((baseColor1 & 0xFF0000) >> 16) / 255.0f;
    CGFloat listviewgreen = ((baseColor1 & 0x00FF00) >>  8) / 255.0f;
    CGFloat listviewblue  =  (baseColor1 & 0x0000FF) / 255.0f;
    
  3. 将ColorCode提供给单元格文本颜色,如下面的方法:

    Cell.textLable.textColor = [UIColor colorWithRed:listviewred green:listviewgreen blue:listviewblue alpha:1.0];
    
  4. 请检查并告诉我。