Ios Can';我不能更改数组中的值吗?

Ios Can';我不能更改数组中的值吗?,ios,objective-c,c,background-thread,Ios,Objective C,C,Background Thread,在我的程序中,我将UIImage的像素数据保存在基本C数组中: // It can be UInt8 as it is greyscaled, values can only be 0-255 @property (nonatomic, readwrite) UInt8 *imageData; 现在,在我的灰度缩放算法中,我初始化它: self.imageData = malloc(sizeof(UInt8) * width * height); 然后我用灰度来填充数据。这很有效。然而,在后

在我的程序中,我将
UIImage
的像素数据保存在基本C数组中:

// It can be UInt8 as it is greyscaled, values can only be 0-255
@property (nonatomic, readwrite) UInt8 *imageData;
现在,在我的灰度缩放算法中,我初始化它:

self.imageData = malloc(sizeof(UInt8) * width * height);
然后我用灰度来填充数据。这很有效。然而,在后面的算法中,我通过一些魔术将值设为0或255。我觉得这样很好。。。但后来的算法寻找这些值得到1和3。因此,我在将值从0-255更改为0或255后立即将其输入:

// Magic loop. Starts with current value at pixelIndex, gets curVal. 
self.imageData[pixelIndex] = curVal;
NSAssert(self.imageData[pixelIndex] != curVal, @"Whattt");
瞧,它实际上并没有改变数组的值。有什么我遗漏的吗?这些数组是一次性设置,然后变成只读的吗?我知道NSArray是这样的,但这只是一个简单的基于C指针的数组。。。或者它们是一样的


不管是什么原因,我怎样才能使其正确地更改这些值?

这应该可以正常工作。我认为您的问题在于您的断言是反向的-条件应该是您希望为真的表达式,因此当前您断言“在我将
self.imageData[pixelIndex]
设置为
curVal
后,它不应等于
curVal
”,而是:

NSAssert(self.imageData[pixelIndex] == curVal, @"Whattt");
顺便说一句,在做这种断言时,我总是认为包含期望值和实际值是有帮助的,这样您就可以看到发生了什么。在这种情况下,您可以执行以下操作:

NSAssert3(self.imageData[pixelIndex] == curVal, @"Image data at pixel index %d should have been %d, but instead was %d", pixelIndex, curVal, self.imageData[pixelIndex]);

这将更明显地表明这些值实际上是相等的,并且在相等检查中出现了一些错误。

Oh。。该死的。谢谢,回到调试绘图板!