Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 字典数组_Iphone_Objective C_Xcode - Fatal编程技术网

Iphone 字典数组

Iphone 字典数组,iphone,objective-c,xcode,Iphone,Objective C,Xcode,我有一个NSMutableArray,purDesc,它包含一个NSMutableDictionary,purDetails。当我使用NSLog(@“%@”,purDesc)时它返回应该有字典的空格,如下所示: singleton purDesc Dump:( { }, { }, { }, { }, { } ) 现在,每次添加字典时,大小/外观/转储都会发生变化,以反映添加/

我有一个
NSMutableArray
purDesc
,它包含一个
NSMutableDictionary
purDetails
。当我使用
NSLog(@“%@”,purDesc)时它返回应该有字典的空格,如下所示:

singleton purDesc Dump:(
        {
    },
        {
    },
        {
    },
        {
    },
        {
    }
)
现在,每次添加字典时,大小/外观/转储都会发生变化,以反映添加/删除字典的次数。以下是取自我的XML解析器的代码片段:

我做错了什么?为什么日志显示为半空?

我看到您这样做:

[purDesc addObject:purDetails];//adds purDetails dictionary to purDesc
[purDetails removeAllObjects];
在purDesc中存储对purDetails的引用,并增加其保留计数,但不复制。因此,如果删除所有对象,词典的内容将丢失。您在purDesc中“存储”了对它的引用这一事实并不会改变这一点。我猜你看到的是这个或类似行动的结果

你不能重复使用这本词典。每次你都必须分配并初始化一个新的。您应该发布您拥有的本地版本,但不清除它

我需要查看更多的代码,以了解如何改进设计,从而使这不是一个问题,并且内存管理得到正确处理。

我看到您做到了:

[purDesc addObject:purDetails];//adds purDetails dictionary to purDesc
[purDetails removeAllObjects];
在purDesc中存储对purDetails的引用,并增加其保留计数,但不复制。因此,如果删除所有对象,词典的内容将丢失。您在purDesc中“存储”了对它的引用这一事实并不会改变这一点。我猜你看到的是这个或类似行动的结果

你不能重复使用这本词典。每次你都必须分配并初始化一个新的。您应该发布您拥有的本地版本,但不清除它


我需要查看更多的代码,以了解如何改进设计,从而使这不是一个问题,并且内存管理得到正确处理。

您实际如何填充数组和字典?我猜字典是空的。什么是singleton,什么是[singleton purDesc]?它与purDesc有什么关系?很难真正看到发生了什么,更不用说什么是错的。如果我记录它们,它会显示值。例如,NSLog(@“Dump:%@,[purDetails description]);返回Dump:{amt=“1.29”;desc=test;}是,但这是详细信息。我需要看更多的代码,看看什么是什么,什么是错的;但是当登录到第二行时,它会显示{}。如果我向purDesc添加另一个purDesc,purDesc将显示{}{}。如果我添加另一个,它将变成{}{}{},等等。顺便说一下,您不需要
NSLog
[…说明]
。只需执行
NSLog(@“%@”,purDesc)
就足够了。您实际上是如何填充数组和字典的?我猜字典是空的。什么是singleton,什么是[singleton purDesc]?它与purDesc有什么关系?很难真正看到发生了什么,更不用说什么是错的。如果我记录它们,它会显示值。例如,NSLog(@“Dump:%@,[purDetails description]);返回Dump:{amt=“1.29”;desc=test;}是,但这是详细信息。我需要看更多的代码,看看什么是什么,什么是错的;但是当登录到第二行时,它会显示{}。如果我向purDesc添加另一个purDesc,purDesc将显示{}{}。如果我添加另一个,它将变成{}{}{},等等。顺便说一下,您不需要
NSLog
[…说明]
。只需执行
NSLog(@“%@”,purDesc)
,就足够了。对于找到它的任何人,我只删除了行[purDetails removeAllObjects];现在,每当我需要一个新的时,我都会alloc和init。不过,请务必注意与此相关的内存管理(尤其是引用计数)问题。您应该发布您分配的内容。只是需要一些经验才能知道何时发布。我花了几周的时间才把事情做好,有时我还是要认真思考这些事情。我想ARC会让这更容易一些。已经在使用ARC了。;)大约十分钟前(在看到您的回复之前),我确实检查了泄漏情况,我可以走了。我感谢您的帮助。是的,ARC消除了大多数关于保留/释放的担忧。Delphi已经有了很多年了,对于接口来说,它让事情变得容易多了;现在,每当我需要一个新的时,我都会alloc和init。不过,请务必注意与此相关的内存管理(尤其是引用计数)问题。您应该发布您分配的内容。只是需要一些经验才能知道何时发布。我花了几周的时间才把事情做好,有时我还是要认真思考这些事情。我想ARC会让这更容易一些。已经在使用ARC了。;)大约十分钟前(在看到您的回复之前),我确实检查了泄漏情况,我可以走了。我感谢您的帮助。是的,ARC消除了大多数关于保留/释放的担忧。Delphi已经有很多年了,对于接口来说,它使事情变得容易多了。