2013-02-09 99 views
0

我有一个由更多子阵列组成的阵列我在哪里初始化NSMutable Dictionary?

我想显示一个子数组的内容摘要到一个TableView与每个条目的出现次数。我已经确定最好和最简单的方法是通过NSMutableDictionary作为中间步骤。

我宣布字典我在执行

@implementation ReviewViewController 
{ 
NSMutableDictionary *dict; 
} 

,并倒在我的方法,我初始化和使用它像这样:

dict = [NSMutableDictionary new]; 
[dict setObject:[Observation entryCount] forKey:[observedItem species]]; 

键和对象的交换是经过深思熟虑的,作为其计数我想要。我正在使用值保留的事实,但密钥被覆盖,所以如果我交换他们,我得到免费的curation。

It works !,但每次调用该方法时,字典都会被重新初始化所破坏,所以我只能得到最后输入的内容。任何地方,它都不在范围之内。

如果我将它作为方法名称中的一个参数传递,我会得到消息“本地声明'dict'隐藏实例变量”。该代码已经是一组不可分割的一组部件,所以

所以,哪里是实例的正确位置?

我很想在这里作出我的贡献,作为一个有意义的感谢,但在我能做到这一点之前,我会看起来很愚蠢的这样的问题。

+0

什么在[观察物种]? – Rajneesh071 2013-02-09 11:48:34

回答

0

您通常会在您的init方法中初始化它。对于一个视图控制器,这通常是如下:“在别的地方,它超出范围”

- (id)initWithNibName:(NSString*)nibName bundle:(NSBundle*)bundle { 
    if ((self = [super initWithNibName:nibName bundle:bundle])) { 
     dict = [NSMutableDictionary new]; 
    } 
    return self; 
} 

我不明白你的意思。这是一个实例变量。因此,它在任何方法的范围内。顺便说一下,我会用下划线前缀命名实例变量,例如: _dict。这是常用的约定,它可以帮助您记住使用它时它是一个实例变量。

+0

谢谢。与此同时,最简单的地方,ViewDidLoad,做了诀窍,但如果initWithNibName是更传统的。我认为强调只用于强制合成财产。生活和学习,我只是住在两个人。 – aremvee 2013-02-09 20:58:38

+0

'viewDidLoad'并不是一个不好的地方。这完全取决于该对象的生命周期。如果它在'viewDidLoad'中,则每次加载视图时,字典将被初始化为一个新的,空的。这可能是你想要的,或者它可能不是。 – mattjgalloway 2013-02-09 21:04:40

相关问题