我用一个 NSArrayController, NSMutableArrayNSTableView 来展示我自己定义的目的(虽然这个问题可能是适用的,如果你只是表示一个清单的香草 NSString 象太)。

在不同的时间点,我需要清理我的阵和刷新的数据从我的数据来源。然而,只是打电话 removeAllObjectsNSMutableArray 目不会触发的韩国国际志愿者组织的更新,所以该列表在屏幕上仍然保持不变。

NSArrayController没有 removeAllObjects 可用的方法,这似乎很奇怪的。(它不会有 addObject, 我使用的添加物,以确保韩国国际志愿者组织是触发和更新。)

最清洁的方式我管理,因为这样正确的是:

[self willChangeValueForKey:@"myArray"];
[myArray removeAllObjects];
[self didChangeValueForKey:@"myArray"];

...所以我不得不做的韩国国际志愿者组织通知手动自己的(这是在我的测试应用程序类,包含 myArray 财产,这是 NSMutableArray, 提到的.)

这似乎是错误的-有一个更好的办法?从我在谷歌上搜索它似乎是一个很少有人感到困惑的缺乏 removeAllObjectsNSArrayController, 但没有看到任何更好解决方案。

我已经看到这种解决方案:

[self removeObjectsAtArrangedObjectIndexes:
  [NSIndexSet indexSetWithIndexesInRange:
    NSMakeRange(0, [[self arrangedObjects] count])]];

但这个看起来甚至更加令人不快给我。至少我的解决方案至少是轻微的自记录。

有没有苹果没有注意到,有时,人们可能希望空的一个列表中控制管理通过一个 NSArrayController 对象?这似乎显而易见的,因此,我认为我必须丢失的东西...

旁白:当然,如果我添加的新项目的阵列(通过 NSArrayController),那么这触发了韩国国际志愿者组织更新的 NSArrayController/NSTableView, ,但是:

  1. 有时候我不会把任何列表中的项目,因为那里没有。所以你看到的只是旧项目。
  2. 这是一个有点令人讨厌了。
有帮助吗?

解决方案

你不要删除项目的一个表中查看。它没有任何项目,它只是显示一个目的的项目。

如果你能的阵控制的内容列结合到一系列属性的一些其他目的,那么你应该被工作与该财产的对象。使用 [[object mutableArrayValueForKey:@"property"] removeAllObjects].

如果,另一方面,你还没结的阵控制的内容列结合,然后您需要交互其 content 直接。使用 [[arrayController mutableArrayValueForKey:@"content"] removeAllObjects].(你也可以工作 arrangedObjects 而不是的 content.如果不工作,试试其它的—我只做过的事情第一种方式,结合阵控制器到别的东西。)

其他提示

有这个问题以及解决这种方式:

NSArrayController* persons = /* your array controller */;
[[persons content] removeAllObjects];

Swift

@IBOutlet var acLogs: NSArrayController!

acLogs.removeObjects(acLogs.content as! [AnyObject])

为我工作。

解决方案在迅速:

if let ac = arrayController
{
    let range:NSRange = NSMakeRange(0, ac.arrangedObjects.count);
    let indexSet:NSIndexSet = NSIndexSet(indexesInRange: range);
    ac.removeObjectsAtArrangedObjectIndexes(indexSet);
}

只是一个更新工作在迅速4:

let range = 0 ..< (self.arrayController.arrangedObjects as AnyObject).count
self.arrayController.remove(atArrangedObjectIndexes: IndexSet(integersIn: range))
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top