ios - 将 #s 数组存储到 NSUserDefaults,为与数组中的 # 匹配的每个单元格行添加复选标记

标签 ios xcode uitableview nsarray nsuserdefaults

在我之前在这里获得帮助的一个应用程序中,我解析了在线的 XML,第一天仅显示 XML 中的 1 个项目,并在应用程序打开后每天添加一个项目。我希望能够向每个单元格的详细 View 添加“标记为已读”操作。这样,用户可以阅读它,将其标记为已读,并且在后续加载时,每个加载的项目旁边都会出现一个复选标记。

由于应用程序每次都会下载 XML,因此我认为以下想法可能最适合执行此操作。我正在考虑将数组存储到 NSUserDefault Key 中。该数组将根据他们选择的行添加一个数字。如果他们选择第 1 行并对其进行标记,则数组会将 #1 添加到其中。如果他们随后选择第 3 行并对其进行标记,则数组中将包含 1 和 3。

这是可行的,然后在 cellForRowAtIndexPath 中,让它为数组中包含的每一行添加一个复选标记?

我脑子里有这个想法,如果可行,只需要一些指导来实现它。谢谢

更新
这是我到目前为止所拥有的很少的东西。在 applicationDidFinishLaunchingWithOptions 中,我检查 NSUserDefault 键“checkedrows”是否存在。如果没有,我用一个空数组的对象来创建它。

if (![defaults objectForKey:@"checkedrows"]) {
        [defaults setObject:@[] forKey:@"checkedrows"];
    }

我的两个主要问题是如何在 cellForRowAtIndexPath 中获取数组中的数字,如果有任何行与它们匹配,请为其添加复选标记。示例:tableview中有5行,数组返回0,2,4。因此,我希望TableView向前第三和第五个单元格添加复选标记。

另一个主要问题是如何在不删除任何旧数字的情况下将数字添加到数组中。

最佳答案

绝对是!

您可以使用 setObject:forKey: 方法将 NSArray 对象写入 NSUserDefaultsobjectForKey: > 检索该数组。

现在,只需聆听

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath

在您的UITableViewDelegate中,检索NSUserDefaults中已存在的数组,添加刚刚点击的索引(从indexPath获取此信息。 code> 对象)到数组,然后简单地将数组写回到 NSUserDefaults!

要向选定的单元格添加复选标记,请在上面的 tableView:didSelectRowAtIndexPath: 委托(delegate)方法中使用以下命令:

[tableView cellForRowAtIndexPath:indexPath].accessoryType = UITableViewCellAccessoryCheckmark;

关于ios - 将 #s 数组存储到 NSUserDefaults,为与数组中的 # 匹配的每个单元格行添加复选标记,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13935867/

相关文章:

ios - NSHTTPURLResponse 变成 NSURLResponse

XCode 的#pragma - Atom 编辑器的标记?

ios - 停止 UITableView 消耗触摸事件,以便父 View 中的滑动菜单可以检测到水平滑动

ios - Swift:根据其中的 UICollectionView 的大小扩展 UITableViewCell 高度

ios - 从一个位置移动到另一个位置后 UIButton 框架发生变化

ios - 如何在位字段上执行插入操作?

objective-c - addTarget :action:forControlEvents - UISwitch in TableView - sender ok, 事件始终为 0x0

ios - ios中的jwplayer未捕获异常

C++ if 语句/xcode

iphone - 在 uitableview 中禁用弹跳也会禁用 iOS 5 上的滚动,但不会禁用 iOS4