0

NSUserDefaultsに格納されているNSMutableArrayの単語とタイトルが一致する行にのみチェックマークを表示するように、アプリのセルを取得しようとしています。現在の私の問題は、すべてのアプリにチェックマークが表示されていることです...行が何にも一致しないアプリでも。これが私のコードとコンソールログです。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    static NSString *CellIdentifier = @"Cell";  

    Cell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {  
        cell = [[Cell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];
    }
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];


    RSSEntry *entry = [_allEntries objectAtIndex:indexPath.row];
NSArray *rowsarray = [defaults objectForKey:@"checkedrows"];
    NSLog(@"ORIGINAL%@", rowsarray);
    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;

    }



        UIFont *cellFont = [UIFont fontWithName:@"Papyrus" size:19];
        UIFont *cellFont2 = [UIFont fontWithName:@"Papyrus" size:17];
        cell.textLabel.text = entry.date;
        cell.detailTextLabel.text = entry.articleTitle;
    cell.detailTextLabel.textColor = [UIColor blackColor];

        cell.textLabel.font = cellFont;
        cell.detailTextLabel.font = cellFont2;

    return cell;
}

コンソールログ:

2012-12-20 11:02:53.793 5MWG[3615:c07] ORIGINAL(
    "Day 1: "
)
2012-12-20 11:02:53.794 5MWG[3615:c07] The array (
    "Day 1: "
)
2012-12-20 11:02:53.794 5MWG[3615:c07] The string Day 1: 
2012-12-20 11:06:23.851 5MWG[3615:c07] 2
2012-12-20 11:06:23.852 5MWG[3615:c07] ORIGINAL(
    "Day 1: "
)
2012-12-20 11:06:23.852 5MWG[3615:c07] The array (
)
2012-12-20 11:06:23.852 5MWG[3615:c07] The string 
2012-12-20 11:06:23.854 5MWG[3615:c07] 2
2012-12-20 11:06:23.854 5MWG[3615:c07] ORIGINAL(
    "Day 1: "
)
2012-12-20 11:06:23.855 5MWG[3615:c07] The array (
    "Day 1: "
)
2012-12-20 11:06:23.855 5MWG[3615:c07] The string Day 1: 

ご覧のとおり、返される文字列は1日目のみです。ただし、entry.date = Day 2の行でも、チェックマークが表示されています。

4

4 に答える 4

3

コードをあまり詳しく調べませんでしたが、再利用識別子を使用してデキューし、cell.accessoryTypeをnoneに設定しない場合、過去にチェックを行ったすべてのリサイクルセルに将来チェックが適用されます。

于 2012-12-19T17:21:21.920 に答える
2

次のように、を追加するか、を条件付きとしてelse書き直す必要があります。if

cell.accessoryType = [entry.date isEqualToString:myString]
?   UITableViewCellAccessoryCheckmark
:   UITableViewCellAccessoryNone;

そうしないと、チェックマークが設定されたセルは、「リサイクル」されたときにアクセサリを永久に保持します。

于 2012-12-19T17:17:45.820 に答える
1

あなたは書く必要があります:

if([entry.date isEqualToString:myString]) {
    cell.accessoryType = UITableViewCellAccessoryCheckmark;
} else {
    cell.accessoryType = UITableViewCellAccessoryNone;
}
于 2012-12-19T17:17:39.330 に答える
0

これは役立つはずです

if([entry.date isEqualToString:myString]) {
    cell.accessoryType = UITableViewCellAccessoryCheckmark;

}else
{
    cell.accessoryType = UITableViewCellAccessoryNone;
}
于 2012-12-19T17:18:36.057 に答える