我的应用程序有一个TableView
博客文章列表,按天排序。选择文章的行时,它将文章的标题添加到NSUserDefault
NSMutableArray
. 当视图刷新时,应用程序获取数组,用于NSPredicate
对数组中与文章标题匹配的项目进行排序,如果标题匹配,它会添加一个复选标记。问题是因为我使用NSString
它只在其中一行添加一个复选标记......无论是最近的条目NSMutableArray
。这是我的代码cellForRowAtIndexPath:
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
RSSEntry *entry = [_allEntries objectAtIndex:indexPath.row];
NSArray *rowsarray = [defaults objectForKey:@"checkedrows"];
NSPredicate *predicate = [NSPredicate predicateWithFormat: @"SELF contains[cd] %@", entry.date];
NSArray *filteredArray = [rowsarray filteredArrayUsingPredicate: predicate];
NSString *myString = [filteredArray componentsJoinedByString:@""];
NSLog(@"The array %@", filteredArray);
NSLog(@"The string %@", myString);
if([entry.date isEqualToString:myString])
{
cell.accessoryType = UITableViewCellAccessoryCheckmark;
}
在控制台中,MYSTRING 被打印多次,数组中的每个项目打印一次,但只在第一个返回的文章标题的行上添加一个复选标记。我怎样才能让它为数组中的每个添加复选标记?
更新:我添加了上面的日志以打印出filteredArray
然后是字符串。我发现了错误,它似乎正在获取数组中的第一项并以与 entry.date 匹配的方式对其进行格式化,但第二项不是。这是控制台中的打印输出。
The array (
"Day 2: "
)
The string Day 2:
The array (
(
"Day 1: "
)
)
The string (
"Day 1: "
)
如您所见,控制台显示的第 1 天与第 2 天不同。第 2 天有效,但另一天无效。有什么建议么?哦,还有,原来的Array使用前NSPredicate
显示
(
(
"Day 1: "
),
"Day 2: "
)
难道我需要在 componentsJoinedByString 中编辑谓词或字符串?
更新:
将值添加到NSUserDefaults
.
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSMutableArray *rowsarray2 = [[NSMutableArray alloc] initWithObjects:[defaults objectForKey:@"checkedrows"], nil];
[rowsarray2 addObject:entry.date];
[defaults setObject:rowsarray2 forKey:@"checkedrows"];
[defaults synchronize];