说我有这个:
NSMutableDictionary *dict = [NSMutableDictionary dictionary];
dict[@1] = @2;
dict[@3] = dict;
我通过调用
来存档dict
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:dict];
然后我后来取消归档:
NSMutableDictionary *dict2 = [NSKeyedUnarchiver unarchiveObjectWithData:data]
问题是dict2[@3]
不是dict2
,而是未初始化的NSDictionary
,而我无法恢复我放入的内容。有谁知道我会如何工作在这附近?提前谢谢!
答案 0 :(得分:4)
Apple邮件列表上的Apple工程师对此进行了解释:http://lists.apple.com/archives/cocoa-dev/2007/May/msg00747.html,
回复有关归档NSMutableArray
的类似问题
将自己作为一个元素。
要点:
这(很可能 - 我没有调查过)不是问题 本身的递归,而是替换自己的对象 在取消归档期间,从
initWithCoder:
返回一个新对象 ...
所以总结的答案是:你不能可靠地递归 引用。但实际上,这些确实发生了(想想NSView
subview / superview关系)和事情吱吱作响。有时他们 不要而且事先不知道某件事是否会奏效 不Chris Kane
Cocoa Frameworks,Apple
答案 1 :(得分:1)
如果您尝试在控制台中打印出dict [@ 3],应用程序将无限循环尝试将其打印出来并且会被卡住,直到它最后崩溃为止。
因此,如果您想将字典存储在字典中,请创建另一个字典。