2012-05-06 13 views
0

UITableViewCellのアクセサリビューでカスタムボタンを作成しました。このボタンは、リストビューでカスタマイズされたチェックボックスとして機能します。列挙型を使用して配列内のアイテムを移動する

プログラムで「チェック済み」アイテムをUITableViewの2番目のセクションに移動したいのですが、これを実行するのが難しいです。

私は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]; 
} 

注2つのアレイ。チェックされていない項目はallGuestsPending配列に移動し、チェックされたゲストはallGuestsArrived配列に移動する必要があります。

このメソッドは、行がタップされたときに呼び出されます。アイテムがチェックされ、テーブルビューの1つのセクションから2つのセクションに移動します(配列に一致します)。

列挙中にオブジェクトを削除することはできません。そのため、移動したオブジェクトを変数に入れて、それを元の配列から削除して新しい配列に追加しようとしています。

上記の方法では、配列の最後の項目が常に新しいセクションに移動します。

このようなことをするより良い方法はありますか?

+0

をあなただけ異なる配列に到着したゲストのすべてを移動したいですか?この関数は、ゲストが到着したかどうかに関係なく、保留中の配列の最後のオブジェクトを毎回消去します。また、到着したゲストは保留中のアレイに残ります。私はあなたの質問のどこかで間違いをしたと思います... – borrrden

+0

RCGuestManagerのゲストインスタンスはすべてですか?もしそうなら、なぜ配列にない新しいゲストで 'movedGuest'を初期化していますか?そうでない場合、RCGuestManagerで 'movedGuest'をなぜ初期化していますか? –

答えて

0

ではなく、次のアイデアを試してみてください。

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

助けてくれてありがとう。私はあなたのコードを試しました。私は昨日同じアプローチを試みました。残念ながら、allGuestsArrived配列の最後の名前は常に2番目のセクション*に配置され、その名前はallGuestsPending配列から削除されません。コードをステップ実行すると、すべて正常に動作しているようです。オブジェクトは出入りします。しかし、テーブルビューでは、オブジェクトが間違っています。おそらく私のコードには別の問題があります。私はこの機能をテストするために小さなバージョンを書くつもりだと思う。再度、感謝します。 – mySilmaril

関連する問題