在 NSMutableArray 中保存每个 didSelectRowAtIndexPath 点击对象
Posted
技术标签:
【中文标题】在 NSMutableArray 中保存每个 didSelectRowAtIndexPath 点击对象【英文标题】:Save each didSelectRowAtIndexPath click's object in MutableArray 【发布时间】:2015-06-29 02:47:44 【问题描述】:我在 TableView 中有一个项目/单元格列表。表格设置为允许多选。
所以,我有这些方法来选择和取消选择。
@interface NotificationsViewController : UIViewController <UITableViewDataSource, UITableViewDelegate,UIScrollViewDelegate>
NSMutableArray *checkedIndexPaths;
-(void)viewDidLoad
//Setup default array
checkedIndexPaths = [[NSMutableArray alloc]init];
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
NotificationsTableViewCell *cell = (NotificationsTableViewCell*)[tableView cellForRowAtIndexPath:indexPath];
cell.imgIcon.image=[UIImage imageNamed:@"select-icon"];
Notifications* selected = notifications[indexPath.section];
selectedGroup = selected.NotificationsId;
[checkedIndexPaths addObject:selectedGroup];
-(void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath
NotificationsTableViewCell *cell = (NotificationsTableViewCell*)[tableView cellForRowAtIndexPath:indexPath];
cell.imgIcon.image=[UIImage imageNamed:@""];
Notifications* selected = notifications[indexPath.section];
selectedGroup = selected.NotificationsId;
[checkedIndexPaths addObject:selectedGroup];
我想在多选期间将每个对象添加到数组中。但是使用这个当前的编码,它会覆盖同一个,我不知道如何让它多个对象数组存储在每次单击单元格中。感谢您的帮助。
【问题讨论】:
您应该使用 for/in 循环。在你问那是什么之前,如果你不知道的话。尝试做一些研究。这是 Apple 提供的一个很好的示例:developer.apple.com/library/ios/samplecode/TableMultiSelect/… 您的代码有很多从根本上不是有效的。尝试交叉引用你对苹果的所有方法,并从它们的隐式结构中学习。 也没有理由NotificationsTableViewCell *cell = (NotificationsTableViewCell*)[tableView cellForRowAtIndexPath:indexPath];
你已经从方法本身知道了 indexPath。另外,您实际上并没有对单元格做任何事情
@soulshined 我需要使用 cell.imgIcon.image=[UIImage imageNamed:@"select-icon"];这就是我宣布“细胞”的原因。
【参考方案1】:
您在每次方法调用后创建新的 NSMutableArrays。您的 listArray
应该是对象的属性,或者在这两种方法的范围之外可见,您可以在每个方法调用中添加和删除项目。
【讨论】:
谢谢。但问题在于每次调用都会覆盖同一个对象。我可以使用什么机制来存储多个? 这不是您的问题:您的行NSMutableArray *listArray = [[NSMutableArray alloc] init];
每次都会创建一个新的空白数组。这就是为什么当您选择多个项目时,第二个似乎覆盖了第一个。
我改变了我的问题,但在这种情况下,不能从 viewDidload 调用数组。它说:“使用未声明的标识符”。
谷歌“目标 C 属性”。无论您在哪里编写,该行都会创建一个局部变量,该变量仅存在于您所在方法的范围内。你需要掌握这个概念才能进行任何类型的 iOS 编程。以上是关于在 NSMutableArray 中保存每个 didSelectRowAtIndexPath 点击对象的主要内容,如果未能解决你的问题,请参考以下文章
在 Xcode 中保存 NSMutableArray 的其他方法
在 Swift 中使用 NSUserDefaults 保存 NSMutableArray 返回 Nil
在 NSUserDefault 中保存 NSMutableArray 给出 nil