2011-08-21 157 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]];