我正在使用 cocos2d-iphone 编写游戏,我们的阶段在 .plist 文件中定义。但是,文件越来越大 - 所以我开发了一个编辑器,它为流程添加了一些结构,并将大部分 plist 分解为固定字段。但是,某些元素仍然需要 plist 编辑器类型功能,因此我在显示“其他参数”的面板上实现了 NSOutlineView。我正在尝试从 XCode 的“属性列表编辑器”复制功能。
我已经实施了以下系统;http://www.stupendous.net/archives/2009/01/11/nsoutlineview-example/
这非常接近我的需要,但是我今天大部分时间都在尝试解决一个问题。通过查找父字典并使用,从所选项目“向后”计算键列的值;
return [[parentObject allKeysForObject:item] objectAtIndex:0];
但是,当树中的给定字典中有多个具有相同值的项目时,此语句总是返回具有该值的第一个项目(它似乎使用 isEqualToString: 或哈希值比较字符串)。这导致键列显示“item1, item1, item1”而不是 item1, item2, item3(其中项目 1-3 都具有值“”)。我接下来尝试了;
-(NSString*)keyFromDictionary:(NSDictionary*)dict forItem:(id)item
{
for( uint i = 0; i < [[dict allKeys] count]; i++ ) {
id object = [dict objectForKey:[[dict allKeys] objectAtIndex:i]];
if ( &object == &item ) {
return [[dict allKeys] objectAtIndex:i];
}
}
return nil;
}
但这总是返回nil。我希望对 NSOutlineView 有更多经验的人能够提供更好的解决方案。虽然这个问题在链接的例子中只出现过一次,但在从字典中删除项目时,我不得不多次使用它。任何帮助将不胜感激。