私のアプリには、TableView
日ごとに並べ替えられたブログ記事のリストがあります。記事の行が選択されると、記事のタイトルが に追加されますNSUserDefault
NSMutableArray
。ビューが更新されると、アプリは配列NSPredicate
を取得し、記事のタイトルに一致する配列内のアイテムの配列を並べ替えるために使用し、タイトルが一致する場合はチェックマークを追加します。問題は、私がそれを使用しているためNSString
、行の1つにのみチェックマークを追加することです...への最新のエントリに関係なく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;
}
コンソールでは、配列内の項目ごとに 1 回ずつ、MYSTRING が複数回出力されますが、最初に返された記事のタイトルの行にチェックマークが追加されるだけです。配列内のすべてにチェックマークを追加するにはどうすればよいですか?
更新: 上記のログを追加してfilteredArray
、文字列を出力しました。エラーが見つかりました。配列の最初の項目を取得し、entry.date と一致するようにフォーマットしているようですが、2 番目はそうではありません。これがコンソールの出力です。
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];