输入到数组中的NSMutableDictionary在某种程度上缺少信息

时间:2013-09-19 22:46:27

标签: objective-c nsmutablearray nsmutabledictionary

我有一个包含自定义对象(AssetNode)的可变数组(downloadQueue),每个对象都有一个NSMutableDictionary作为属性。

@interface AssetNode : NSObject {
    NSMutableDictionary* allData;
}
@property (nonatomic, retain) NSMutableDictionary* allData;

当我从downloadQueue中删除AssetNode时,剩余的AssetNode对象的.allData属性会以某种方式被修改,最终会丢失一些值/密钥对。

-(void)removeAssetNodeFromQueue:(AssetNode*)aNode{
    NSMutableArray *temp = [NSMutableArray array]; 
    for (AssetNode* node in downloadQueue)
    {
        if ([aNode.nodeId isEqualToString:node.nodeId])
        {
            [temp addObject:node];
        }
    }
    [downloadQueue removeObjectsInArray:temp];
}

知道为什么会发生这种情况或者如何维护字典信息的完整性?

2 个答案:

答案 0 :(得分:0)

在代码中修改allData的每个位置添加NSLog或断点。记录整个字典。我希望你的代码中有一个错误,而不是NSMutableDictionary意外丢失你的数据。

答案 1 :(得分:0)

是的,保留要删除的对象的字典

if ([aNode.nodeId isEqualToString:node.nodeId])
{
    [temp addObject:node];
    [temp.allData retain];
}

但我建议将allData存储到另一个变量中,否则你会泄漏内存。

查看苹果自动参考计数(ARC),这个文档很好: https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/MemoryMgmt/Articles/mmRules.html#//apple_ref/doc/uid/20000994-BAJHFBGH

如果您希望我快速向您解释保留计数,请评论我的答案。

干杯