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)