2011-08-21 228 views
0

我遇到了一個小問題。我有一個UITableView與2個部分:文件夾和個別職位(墨水)。帖子被保存到NSMutableArray中,文件夾是包含帖子的數組的數組。當您點擊編輯按鈕時,每個單元格上都會出現複選標記框,以允許檢查每個帖子。一旦選中一個項目,它將從inks陣列中移除並移動到臨時陣列中。在選擇要將帖子移動到哪個文件夾後,將臨時數組中的項目複製到其中一個文件夾數組中。我使用臨時數組傳輸項目的原因是使用戶不選中項目,這樣它就不會從實際數組中移除。將對象從一個陣列傳輸到另一個陣列

-(IBAction)checkMarkSelected:(id)sender 
{ 
    if(numberTimesChecked%2==0) { //even times, check 
     [appDelegate.inksToFolder addObject:[appDelegate.inks objectAtIndex:[sender tag]]]; 
     [tempArray removeObjectAtIndex:[sender tag]]; //tempArray is initialized with the contents of appDelegate.inks in the viewDidAppear method, so its just a duplicate 
    } 
    else //odd times, no check 
    { 
     [appDelegate.inksToFolder removeObjectAtIndex:[sender tag]]; 
     [tempArray addObject:[appDelegate.inks objectAtIndex:[sender tag]]]; 
    } 
    numberTimesChecked++; } 

-(IBAction)moveToFolderPressed:(id)sender 
{ 
    NSMutableArray *arrayOfInks=[appDelegate.folders objectAtIndex:[sender tag]]; 
    [arrayOfInks addObjectsFromArray:appDelegate.inksToFolder]; 
    [appDelegate.folders replaceObjectAtIndex:[sender tag] withObject:arrayOfInks]; 
} 

因此,我面臨的問題是如果用戶多次點擊複選框,該怎麼辦。如果用戶按下偶數次,則表示存在複選標記,如果出現奇數次,則沒有複選標記,並且這些項目不應該被觸摸。但是,當檢查一個項目並且說這個項目位於inks數組中的索引4處時,該項目將被移動到索引0處的tempArray。如果它未被選中,它將如何知道從tempArray中刪除項目的位置?因此,如果我檢查索引4然後索引2然後索引7然後取消選中索引4,它將嘗試從inksToFolder數組中刪除索引4中的對象,但該索引不存在。有沒有人知道解決方案,或甚至更好的方式來實現這件事?

回答

1

可能有更好的方法來做這件事。我會跟蹤哪些行被檢查,然後只有在用戶提交操作後才執行數組移動。

但是,如果你只是想解決方法來完成當前的技術,那麼也許你可以使用NSMutableDictionary作爲臨時存儲。

寫對象字典:爲重點

[myDictionary setObject:myObject forKey:someKey]; 

一個例子:

[myDictionary setObject:myObject forKey:[NSNumber numberWithInt:[sender tag]]; 

您可以使用[發件人標籤]在詞典中的關鍵,如果你把它包首先是一個NSNumber(NSMutableDictionary的鍵必須符合NSCopying協議,而NSNumber只能這樣做)。

查找基於它的目標是在字典中鍵:

[myDictionary objectForKey:someKey]; 

刪除基於它的目標是在字典中鍵:

[myDictionary removeObjectForKey:someKey]; 

用戶後做了他們所有的檢查和取消選中,然後他們提交移動,然後將對象從您的臨時字典中取出,並返回到數組中,您可以:

檢索字典中的所有鍵:

NSArray *keysArray = [myDictionary allKeys]; 

遍歷這個整個數組,插入字典的對象放回原來的數組:

[myDictionary objectForKey:someKey]; 

使用的NSNumber -intValue的關鍵轉換回的整數執行插入回你原來的array:

[myOriginalArray insertObject:myObject atIndex:[someKey intValue]]; 
相關問題