【问题标题】:Moving items in arrays using enumeration使用枚举移动数组中的项目
【发布时间】:2012-05-06 01:29:50
【问题描述】:

我在UITableViewCell 的附件视图中创建了一个自定义按钮。该按钮充当列表视图中的自定义复选框。

我想以编程方式将“已检查”项目移动到 UITableView 的第二部分,但我在执行此操作时遇到了困难。

我正在关注 MVC,我正在使用 BOOL didArrive 在以下方法中对选中的项目进行排序:

- (void)shuffleGuests
{
    RCGuestManager *movedGuest = [[RCGuestManager alloc] init];
    for (id guest in allGuestsPending) {
        if ([guest didArrive]) {
            [allGuestsArrived addObject:guest];
            movedGuest = guest;
        }
    }
    [allGuestsPending removeObjectIdenticalTo:movedGuest];
}

注意这两个数组。未选中的项目应该进入 allGuestsPending 数组,选中的客人应该进入 allGuestsArrived 数组。

点击一行时调用此方法。检查该项目,然后将其从表格视图中的一个部分移到另一个(与数组匹配)。

当然,我不能在枚举过程中删除一个对象,所以我试图将移动的对象放入一个变量中,然后将其从以前的数组中删除,同时将其添加到新数组中。

上述方法导致数组中的最后一项总是移动到新的部分。

有没有更好的方法来做这种事情?

【问题讨论】:

  • 您只想将所有到达的客人移动到不同的阵列?此函数每次都会擦除待处理数组中的最后一个对象,无论客人是否已到达。它还将到达的客人留在待处理的数组中。我认为您在问题的某个地方犯了错误...
  • 都是RCGuestManager的guest实例吗?如果是这样,您为什么要使用不在阵列中的全新来宾初始化movedGuest?如果不是,为什么要使用 RCGuestManager 初始化 movedGuest

标签: ios cocoa nsarray enumeration


【解决方案1】:

请尝试以下想法:

NSMutableArray *guestsToRemove = [NSMutableArray array];
for (id guest in allGuestsPending) {
    if ([guest didArrive]) {
        [allGuestsArrived addObject: guest];
        [guestsToRemove addObject: guest];
    }
}
[allGuestsPending removeObjectsInArray: guestsToRemove];

【讨论】:

  • 感谢您的帮助。我试过你的代码。我昨天也尝试了同样的方法。不幸的是,allGuestsArrived 数组中的姓氏总是放在第二部分 并且 该名称不会从 allGuestsPending 数组中删除。当我单步执行代码时,一切似乎都运行良好。物体来来去去。但是在表格视图中,对象是错误的。也许我的代码中还有另一个问题。我想我会写一个更小的版本来测试这个功能。再次感谢。
猜你喜欢
  • 2021-08-11
  • 2014-12-12
  • 2020-12-22
  • 2017-05-14
  • 2010-10-25
  • 2015-09-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多