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
Objective c 使用内部列表时如何对NSCOMBOX上的条目进行排序_Objective C_Macos_Cocoa - Fatal编程技术网

Objective c 使用内部列表时如何对NSCOMBOX上的条目进行排序

Objective c 使用内部列表时如何对NSCOMBOX上的条目进行排序,objective-c,macos,cocoa,Objective C,Macos,Cocoa,我有一个,我不使用数据源,而是使用内部列表功能。所以我用addItemsWithObjectValues和additemswithobjectvalue方法填充它 我的问题是,在使用addItemWithObjectValue添加新内容后,如何按字母顺序对内部列表中的组合框条目进行排序?在不使用数据源的情况下在NSComboBox中保持排序。首先,当您最初添加项目时,必须按如下方式对其进行排序: // Using NSComparator because it is needed later o

我有一个,我不使用数据源,而是使用内部列表功能。所以我用
addItemsWithObjectValues
additemswithobjectvalue
方法填充它


我的问题是,在使用
addItemWithObjectValue
添加新内容后,如何按字母顺序对内部列表中的组合框条目进行排序?

在不使用数据源的情况下在
NSComboBox
中保持排序。首先,当您最初添加项目时,必须按如下方式对其进行排序:

// Using NSComparator because it is needed later on
NSComparator sort = ^(id obj1, id obj2) {
    return [obj1 caseInsensitiveCompare: obj2];
};

[comboBox addItemsWithObjectValues: [titles sortedArrayUsingComparator: sort]];
接下来,当您希望在中添加单个项目时保持排序时:

NSArray *objectValues = comboBox.objectValues;
[comboBox insertItemWithObjectValue: newTitle 
                            atIndex: [objectValues indexOfObject: newTitle
                                                   inSortedRange: NSMakeRange(0, objectValues.count) 
                                                         options: NSBinarySearchingInsertionIndex 
                                                 usingComparator: sort]];

这是通过找到合适的索引来插入新项目,并在该索引处插入项目来实现的。

您需要预先计算新项目在列表中的位置,并使用
-(void)insertItemWithObjectValue:(id)anObject atIndex:(NSInteger)index
将它们插入到合适的索引处

不能对内部列表重新排序。您需要使用
-(void)removeAllItems
,然后按顺序重新添加它们