从另一个方法访问时目标 c 丢失 NSDecimalNumber 值

发布于 2024-09-28 17:32:38 字数 419 浏览 3 评论 0原文

我正在将 Json 数据解析为 NSDecimalNumber,如下所示。

product.Price = [NSDecimalNumber decimalNumberWithDecimal:[[jProduct
objectForKey:@"Price"] decimalValue]];

这是一个循环,每个产品都被添加到数组中。最后我释放了 json 对象。

如果我在循环期间记录 Product.Price 的值,则该值是正确的。然而,在应用程序生命周期的后期,我访问了数组中的一个产品,然后我得到了EXC_BAD_ACCESS

这是指向随后被释放的 json 数据的一些奇怪的指针问题吗?有什么想法吗?值得注意的是,我的 NSIntegers 和 NSStrings 的值都很好。

I am parsing Json Data into an NSDecimalNumber as follows

product.Price = [NSDecimalNumber decimalNumberWithDecimal:[[jProduct
objectForKey:@"Price"] decimalValue]];

This is in a loop with each product being added to an array. At the end I release the json object.

If I Log the value of product.Price during the loop the value is correct. However later on the the application lifecycle I access a product in the array and bang, I get EXC_BAD_ACCESS.

is this some odd pointer issue back to the json data which is then being released? any ideas? It's worth noting that the values of my NSIntegers and NSStrings are fine.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

天生の放荡 2024-10-05 17:32:38

您没有显示所有相关代码,但我的猜测是 Price 属性的定义(应该以小写字母开头,顺便说一句)没有 retain关键字。结果是 [NSDecimalNumber DecimalNumberWithDecimal:...] 中的自动释放对象只是自动释放:-) 然后你的指针指向无效内存。

该属性的声明应与此类似:

@property(retain) NSDecimal *Price;

如果缺少 retain 关键字,则仅存储指针,但该属性不会增加保留计数(告诉对象:我需要你留下来直到我和你说完)。

You didn't show all the relevant code, but my guess is that the definition of the Price property (which should start with a lower case letter, BTW) does not have the retain keyword. The result is that the autoreleased object from [NSDecimalNumber decimalNumberWithDecimal:...] simply gets autoreleased :-) And then your pointer is pointing to invalid memory.

The property should be declared similar to this:

@property(retain) NSDecimal *Price;

If the retain keyword is missing then only the pointer will be stored, but the property will not increase the retain count (tell the object: I'll need you to stay around until I'm done with you).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文