gpt4 book ai didi

ios - 将 NSArray 拆分为 NSString

转载 作者:行者123 更新时间:2023-11-29 13:22:53 28 4
gpt4 key购买 nike

我的应用程序有一个 TableView,其中包含按天排序的博客文章列表。选择文章的行时,它会将文章的标题添加到 NSUserDefault NSMutableArray 中。刷新 View 时,应用程序获取数组,使用 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 天有效,但另一天无效。有什么建议么?哦,还有,使用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];

最佳答案

正如您打印的那样,两种情况下的数据结构都不相同。原始数组本身显示第一个元素是一个数组,另一个数组是字符串,第二个元素只是一个字符串。因此,在过滤和加入时,您将获得 ( "Day 1: "),它表示一个数组,其中您期望的字符串为 "Day 1: "。请检查为什么您的原始数组具有这种数据结构。

为了让你的代码工作,而不是

(
(
"Day 1: "
),
"Day 2: "
)

应该是,

(
"Day 1: ",
"Day 2: "
)

所以你需要改变方式,你正在向 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];

试试这个,

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
NSMutableArray *rowsarray2 = [NSMutableArray arrayWithArray:[defaults objectForKey:@"checkedrows"]];
[rowsarray2 addObject:entry.date];
[defaults setObject:rowsarray2 forKey:@"checkedrows"];
[defaults synchronize];

基本上,您是在创建一个以先前数组为对象的数组,而不是将新对象添加到同一数组。

关于ios - 将 NSArray 拆分为 NSString,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13945817/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com