在Objective-C中设置数组的元素

时间:2012-05-16 22:03:52

标签: iphone objective-c ios

我的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像素
  • 的大小
  • 为该阵列创建内存?
  • 然后根据数据,如果该区域有值,请添加一个数字,以便稍后在该区域绘制一个值。

2 个答案:

答案 0 :(得分:0)

你注释掉的逻辑总是会产生0或2.无论你从比较到@“A”设置的是什么,都是无条件写下来的if / else。

答案 1 :(得分:0)

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

mapBins = 1024;

......应该是这样的:

mapBinSize = 1024;

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

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