Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/8.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 如何获取NSTableView行动画的插入和删除_Objective C_Macos_Animation_Nstableview - Fatal编程技术网

Objective c 如何获取NSTableView行动画的插入和删除

Objective c 如何获取NSTableView行动画的插入和删除,objective-c,macos,animation,nstableview,Objective C,Macos,Animation,Nstableview,我正在寻找一个API调用,该调用提供要删除和插入的行的NSMutableIndexSet,以便在NSTableView中设置行动画。理想情况下,我应该传递一个旧的和新的数组,以获得结果的remove和insert索引,而在NSTableView或相关协议中,我看不到类似的情况 我想在beginUpdates和endUpdates之间实现动画,如下所示: [_tableView removeRowsAtIndexes:rowsToRemove withAnimation:NSTableViewAn

我正在寻找一个API调用,该调用提供要删除和插入的行的
NSMutableIndexSet
,以便在
NSTableView
中设置行动画。理想情况下,我应该传递一个旧的和新的数组,以获得结果的remove和insert索引,而在
NSTableView
或相关协议中,我看不到类似的情况

我想在
beginUpdates
endUpdates
之间实现动画,如下所示:

[_tableView removeRowsAtIndexes:rowsToRemove withAnimation:NSTableViewAnimationSlideUp];
[_tableView insertRowsAtIndexes:rowsToInsert withAnimation:NSTableViewAnimationSlideDown];

我正在为此使用一个类,具有两个属性:

@property (strong, nonatomic) NSIndexSet *rowsToRemove;
@property (strong, nonatomic) NSIndexSet *rowsToInsert;
初始化采用两个数组(旧数组和新数组),我使用它们来获取要插入的行和要删除的行的索引:

- (instancetype) initWithOldArray:(NSArray *)oldArray newArray:(NSArray *)newArray
{
    self = [super init];

    if (self) {
        //Get a list of deletion indices
        NSMutableIndexSet *rowsToRemove = [NSMutableIndexSet new];
        NSUInteger numOldItems = oldArray.count;
        for (NSUInteger i = 0; i < numOldItems; i++) {
            id item = oldArray[i];
            if (![newArray containsObject:item]) {
                [rowsToRemove addIndex:i];
            }
        }

        //Get a list of insertion indices
        NSMutableIndexSet *rowsToInsert = [NSMutableIndexSet new];
        NSUInteger numNewItems = newArray.count;
        for (NSUInteger i = 0; i < numNewItems; i++) {
            id item = newArray[i];
            if (![oldArray containsObject:item]) {
                [rowsToInsert addIndex:i];
            }
        }

        self.rowsToRemove = rowsToRemove;
        self.rowsToInsert = rowsToInsert;
    }

    return self;
}
-(instancetype)initWithOldArray:(NSArray*)oldArray newArray:(NSArray*)newArray
{
self=[super init];
如果(自我){
//获取删除索引的列表
NSMutableIndexSet*rowsToRemove=[NSMutableIndexSet new];
nsuiger numOldItems=oldArray.count;
对于(整数i=0;i