在 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 的其他方法

在 iOS 中保存 NSMutableArray

在 Swift 中使用 NSUserDefaults 保存 NSMutableArray 返回 Nil

在 NSUserDefault 中保存 NSMutableArray 给出 nil

在 NSMutableArray/NSArray 中保存像素数据;记忆问题

使用 NSMutableArray 保存到核心数据