NSMutableDictionary 输入到数组中以某种方式丢失了信息

Posted

技术标签:

【中文标题】NSMutableDictionary 输入到数组中以某种方式丢失了信息【英文标题】:NSMutableDictionary input into an array is somehow missing info on the way out 【发布时间】:2013-09-19 22:46:27 【问题描述】:

我有一个包含自定义对象 (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];

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

【问题讨论】:

【参考方案1】:

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

【讨论】:

原来有一个地方在修改 allData 时不应该修改。感谢您的帮助。【参考方案2】:

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

if ([aNode.nodeId isEqualToString:node.nodeId])

    [temp addObject:node];
    [temp.allData retain];

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

查看 apples Automatic Reference Counting (ARC),这个文档很好: https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/MemoryMgmt/Articles/mmRules.html#//apple_ref/doc/uid/20000994-BAJHFBGH

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

干杯

【讨论】:

以上是关于NSMutableDictionary 输入到数组中以某种方式丢失了信息的主要内容,如果未能解决你的问题,请参考以下文章

从 NSMutableDictionary 到字符串数组的 Alamofire 结果:Anyobject

如何创建一个包含许多 NSMutableArrays 的 NSMutableDictionary

添加到 NSDictionary 条目到 NSMutableDictionary

ios手动添加数组字典(NSMutableDictionary)

释放数组时 NSMutableDictionary 中使用的对象的内存会发生啥?

使用 NSMutableDictionary 和数组填充单元格的 TableView