【问题标题】:-[CFString intValue]: message sent to deallocated instance 0xa3a2610-[CFString intValue]:消息发送到已释放实例 0xa3a2610
【发布时间】:2013-09-05 03:23:54
【问题描述】:

我在 stackoverflow 中找到了一些相同的主题,但我无法解决我的问题。

这是我的代码

在我的 .h 中

@property (nonatomic, retain) NSMutableArray *favoriteShops;

我的.m

NSString *idStr = @"";
NSString *shopTypeId = @"";
for (SHDFavoriteShopView *favoriteShopView in favoriteShops) {
            idStr = [favoriteShopView valueForKey:kId];
            shopTypeId = [favoriteShopView valueForKey:kShopTypeId];
            if (tappedView.tag == [idStr intValue]) {  // Crash here
                shop.shopType = [shopTypeId intValue];
                break;
            }

        }

我有时会遇到问题,通常不会。

你能帮帮我吗?

谢谢你

【问题讨论】:

    标签: ios6.1


    【解决方案1】:

    这表明您正在访问的字符串(在本例中为idString)已被释放。发生这种情况的原因有很多。如果字符串最初是通过自动释放方法(例如[NSString stringWithFormat:@"..."])分配的,并且字符串被自动释放。或者,如果您分配了字符串,但后来通过显式调用[idStr release] 释放了它。您需要确保在字符串已发布后不会重新使用它。这可能很棘手!

    【讨论】:

    • 我在循环后使用 [idStr release]。但我在循环中有问题
    • 你不应该在循环之后释放idStr!它的值在循环的每次迭代中都会发生变化,那么您要发布什么?只是最后一个值!但这不是您在这里看到的问题。我会查看favoriteShopView。你向favoriteShopView 询问某个键的值,它返回idStr 指向的字符串。所以到那时它可能是一个已经被释放的字符串。如果您发布SDHFavoriteShopView 的代码,这可能有助于缩小范围。
    • favoriteShopView 是 NSDictionary 。这是我的错误。但是当我用 NSDictionary 替换 SHDFavoriteShopView 时,我遇到了同样的问题
    • 当我使用 [[favoriteShopView valueForKey:kId] intValue] 和 [[favoriteShopView valueForKey:kShopTypeId] intValue] 时,我没有问题
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-10-21
    • 2011-06-16
    相关资源
    最近更新 更多