0

我的 Objective-C 相当生锈或根本不存在。我试图弄清楚这段代码是如何做的,以便修改它并遇到一些麻烦。这段代码基本上根据它拥有的数据在 ipad UIView 上的像素位置(沿着 iPad 的宽度,如密度或列图)绘制线条。从数据中,它计算出要分配的值,然后另一种方法提取信息。

在 .h 文件中,声明了这个 ivars

ushort *mapBins;
int mapBinSize;
int mapBinMin;
int mapBinMax;

然后在 .m 中(注释掉的代码是我想要做的)

mapBins = 1024;
mapBins = malloc(mapBinSize * sizeof(ushort));
memset(mapBins, 0, mapBinSize * sizeof(ushort));


int pixelPos = 0;
// populate bins
for (int l=0; l<[locs count]; l++) // locs is a member variable that has positions to draw where there is valid data, everything else is blank
{
    int sLoc = [[locs objectAtIndex:l] intValue];
    pixelPos = (sLoc - self.startPos) / [self basesPerPixel];
    int index = pixelPos;
    if (index > mapBinMax) {
        continue;
    }
    if (index < 0 )
    {
        continue;
    }
        //        if ([m.type rangeOfString:@"A"].location == NSNotFound) {
//            mapBins[index] = 0;
//        }
//        else {
//            mapBins[index] = 1;
//            NSLog(@"1");
//        }
//        if ([m.type rangeOfString:@"T"].location == NSNotFound) {
//            mapBins[index] = 0;            
//        }
//        else {
//            mapBins[index] = 2;
//            NSLog(@"2");
//        }

    mapBins[index] += 1;
}
return YES;
}

所以用他们的代码,在绘图代码中,它基本上检查

 if (mapBins[posX] == 0) {
        [blank setStroke];
    }
 else {
      [YELLOW_COLOR setStroke];
 }

对于每个像素。所以现在我想根据我从数据中获得的信息来改变颜色。就像在注释掉的代码中一样,它显示了我正在尝试做的一部分。

我不明白的是,我将 mapBin[index] 设置为 0 以外的值。我通过控制台上的 NSLog(@"1") 语句看到了这一点。但是,如果我通过执行以下操作在循环结束时记录输出: NSLog(@"%i", mapBins[posX]);我得到 0 作为输出。当我尝试绘制它时,我得到一个空白笔画而不是彩色笔画,因为值为 0。

是不是发生了一些我在 C 中不理解的事情?我收集的是他们正在这样做(虽然可能是错误的):

  • 将 mapBinSize 设置为一屏长度或 1024 像素的大小
  • 为该数组创建内存?
  • 然后根据数据,如果该 bin 有值,则添加一个数字,以便稍后在该区域绘制一个值。
4

2 回答 2

0

您注释掉的逻辑将始终导致 0 或 2。无论您从与 @"A" 的比较中设置什么,都将被以下 if/else 无条件地覆盖。

于 2012-05-16T22:12:10.370 回答
0

从上下文来看,我猜这是:

mapBins = 1024;

...应该是这样的:

mapBinSize = 1024;

您发布的代码中也没有提及,snpMapBins并且您正在谈论的代码已被注释掉。

看起来您发布的代码并不代表您实际运行的代码。你能发布实际的代码吗?

于 2012-05-16T22:13:34.140 回答