1

我有一个NSTableView并且需要添加值。我想用 来做NSArrayController,但在我的桌子附近有四个按钮:移到顶部、上移、下移、移到底部。我必须能够使用这些按钮重新排序表中的条目。

我唯一能想到的是使用一个字典数组,其中字典的第一个条目是显示的值,字典的第二个条目是用于对数组进行排序的双精度数。如果我向上或向下移动一个值,我会在目的地之前和之后将条目的排序值相加,然后除以 2。

我不确定我正在考虑的解决方案是否合适。这种情况的最佳方法是什么?

- - - 编辑 - - -

处理它,现在我很难将更新的“订单”值写入数组控制器。除此之外,一旦值已更新,我实际上无法使用“订单”列对表格进行排序。这是我的代码:

-(IBAction)singleMoveKeywordUp:(id)sender
{
NSInteger selectedRow = [singleKeywordTable selectedRow];
double firstnum;
double secondnum;
double newnum;

NSMutableDictionary *kwmutabledict = [[NSMutableDictionary alloc] init];

if (selectedRow < 2)
{
    firstnum = 0;
    kwmutabledict = [keywordscontroller.arrangedObjects objectAtIndex:0];
    secondnum = [[kwmutabledict valueForKey:@"order"] doubleValue];
}
  else
{

    kwmutabledict = [keywordscontroller.arrangedObjects objectAtIndex:selectedRow-2];
    firstnum = [[kwmutabledict valueForKey:@"order"] doubleValue];
    kwmutabledict = [keywordscontroller.arrangedObjects objectAtIndex:selectedRow-1];
    secondnum = [[kwmutabledict valueForKey:@"order"] doubleValue];

}


NSMutableDictionary *newkwmutabledict = [[NSMutableDictionary alloc] init];
newnum = (firstnum + secondnum)/2;



[newkwmutabledict setObject:[NSString stringWithFormat:@"%@",[kwmutabledict valueForKey:@"keyword"]] forKey: @"keyword"];
[newkwmutabledict setObject:[NSString stringWithFormat:@"%f",newnum] forKey: @"order"];

[keywordscontroller.arrangedObjects replaceObjectAtIndex:selectedRow withObject:newkwmutabledict] ; //<--------

NSSortDescriptor *sort = [NSSortDescriptor sortDescriptorWithKey:@"order" ascending:YES];

[singleKeywordTable setSortDescriptors:[NSArray arrayWithObject:sort]];
}

这在标有箭头的行中失败,错误消息是-[_NSControllerArrayProxy replaceObjectAtIndex:withObject:]: unrecognized selector sent to instance 0x100450520 我无法弄清楚出了什么问题。

4

1 回答 1

2

keywordscontroller.arrangedObjects 返回 (NSArray *),它是不可变的,并且 NSArray 不包含选择器“replaceObjectAtIndex:withObject:”。因此出现异常/错误“无法识别的选择器”。

于 2014-05-26T05:01:07.230 回答