2011-01-23 77 views
0

我将Interface Builder中的arraycontroller(myArraycontroller)连接到由字典组成的数组(fileDictionariesArray)。这工作得很好,但是当我试图访问并列举在arraycontroller [myArrayController arrangedObjects]的内容,我得到的含量为零,直到我编程方式添加内容到我的arrayController这样的:NSArraycontroller访问内容

[myArrayController addObjects:fileDictionariesArray]; 

我已经做到了我能后循环所有的内容。问题是数组(fileDictionariesArray)已被添加两次。一次通过IB绑定,一次通过addObjects。我只是不能访问arrayContoller,直到我以编程方式设置内容。我可以删除arrayController的内容,然后再编程设定这样的:

[myArrayController setContent:nil]; 
[myArrayController addObjects:fileDictionariesArray]; 

其中给出的arrayController项目的正确数目,但它似乎并不像正确的方式做到这一点。我会很感激任何人都可以给我一个暗示,如何通过arrainedObjects数组访问我的arrayController而不添加内容两次。

谢谢你的帮助。干杯,特隆德克里斯蒂安森

+0

当你说你得到零的内容,何时/如何,你如何检查? – 2011-01-23 15:48:44

+0

您在此之前的评论发生了什么?我调用[myArrayController addObjects:fileDictionariesArray];然后在那之后立即遍历arrayController的元素:for(NSDictionary * file in myArray){NSLog ...}。数组的数量应该是20,而第一个元素包含null的是21。我想这可能是我添加一个数组到一个空的或空的阵列控制器,由awakeFromNib初始化的结果? – 2011-01-23 15:52:44

回答

0

根据你的文章和你和Bavarious之间的意见,我相信他不应该删除他的答案。他问过你在哪里调用这个代码(来自-awakeFromNib?)。这是一个必须回答的问题。

如果你从-awakeFromNib调用它,那么下一个问题是“笔尖中的对象是什么?所有者?一些其他控制器?什么是一个文档?”

事情是数组控制器可能没有时间在您调用代码之前观察对数组的“更改”。这就是为什么添加内容强制导致其被添加两次的原因(因为完成后,数组控制器会观察其内容数组并再次拉入内容......此时您已将数组内容加倍) 。

如果你正在做立即启动的东西,最好直接在阵列上操作。没有什么“错误的”或“肮脏的”,只要您在启动完成后将责任留给阵列控制器即可。

很难得到更具体的,因为我只是猜测你可能在做什么。修改你的问题以包含一个更完整的描述,说明你的数组控制器如何适用于架构,你在启动时对阵列做了什么具体的事情等。丢失任何这些信息都会导致太多的猜测。