【问题标题】:Can't change a value in my array?无法更改数组中的值?
【发布时间】:2014-02-26 19:23:49
【问题描述】:

在我的程序中,我将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");

你瞧,它实际上并没有改变我的数组的值。有什么我想念的吗?这些数组是一次性设置的,然后它们变成只读的吗?我知道 NSArrays 就是这样,但这只是一个简单的基于 C 指针的数组......或者它们是一样的吗?

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

【问题讨论】:

    标签: ios objective-c c background-thread


    【解决方案1】:

    这应该可以正常工作。我认为你的问题只是你的断言倒退了——条件应该是一个你想要true的表达式,所以目前你断言“在我将self.imageData[pixelIndex]设置为@ 987654322@,不应该等于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]);
    

    这将更明显地表明值实际上是相等的,并且在您的相等性检查中出现了问题。

    【讨论】:

    • 哦..该死的。谢谢,回到调试画板!
    猜你喜欢
    • 2015-03-20
    • 2021-10-28
    • 1970-01-01
    • 2014-12-13
    • 2021-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-11
    相关资源
    最近更新 更多