复选标记检查行但不检查对象

时间:2014-03-21 21:52:28

标签: iphone uitableview checkmark

所以我在使用CoreData和NSUserDefault的UITableView中的Checkmarks有两个问题

  1. 如果我在tableview中创建一个新对象,则取消选中它。当我检查这个对象时,检查它。好吧那就好了...但是当我创建10个对象并检查第5个对象时,删除它并刷新tableView,而不是第6个对象,现在是第5个对象。我该如何解决这个问题?

  2. 当我删除一个已检查的对象并创建一个具有相同名称的对象时,刷新UITableView,它在创建后立即被检查?跆拳道? :d

  3. 我猜NSUserDefault是问题所在,但我不知道......

    所以这是我的代码:

    勾号:

        - (BOOL) getCheckedForIndex:(int)index
        {
            if([[[NSUserDefaults standardUserDefaults] valueForKey:[self getKeyForIndex:index]] boolValue]==YES)
            {
                return YES;
            }
            else
            {
                return NO;
            }
        }
    
        - (void) checkedCellAtIndex:(int)index
        {
            BOOL boolChecked = [self getCheckedForIndex:index];
    
            [[NSUserDefaults standardUserDefaults] setValue:[NSNumber numberWithBool:!boolChecked] forKey:[self getKeyForIndex:index]];
            [[NSUserDefaults standardUserDefaults] synchronize];
        }
    
    
    
        - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
        {
            [tableView deselectRowAtIndexPath:indexPath animated:NO];
    
            //Use checkedCellAtIndex for check or uncheck cell
            UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
    
            [self checkedCellAtIndex:indexPath.row];
    
            if([self getCheckedForIndex:indexPath.row]==YES)
            {
                cell.accessoryType = UITableViewCellAccessoryCheckmark;
            }
            else
            {
                cell.accessoryType = UITableViewCellAccessoryNone;
            }
        }
    
    - (void) checkedCellAtIndex:(int)index
    {
        BOOL boolChecked = [self getCheckedForIndex:index];
    
        [[NSUserDefaults standardUserDefaults] setValue:[NSNumber numberWithBool:!boolChecked] forKey:[self getKeyForIndex:index]];
        [[NSUserDefaults standardUserDefaults] synchronize];
    }
    

    的TableView:

    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
    {
        static NSString *CellIdentifier = @"Cell";
        UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
        cell.backgroundColor = [UIColor clearColor];
        cell.backgroundView = [[UIImageView alloc] initWithImage:[ [UIImage imageNamed:@"cell_background.png"] stretchableImageWithLeftCapWidth:0.0 topCapHeight:5.0] ];
        cell.selectedBackgroundView =  [[UIImageView alloc] initWithImage:[ [UIImage imageNamed:@"cell_background.png"] stretchableImageWithLeftCapWidth:0.0 topCapHeight:5.0] ];
    
        // Configure the cell...
        NSManagedObject *device = nil;
        if (tableView == self.searchDisplayController.searchResultsTableView)
            {device = [searchResults objectAtIndex:indexPath.row];}
        else
            {device = [self.cart objectAtIndex:indexPath.row]; }
    
        [cell.textLabel setText:[NSString stringWithFormat:@"%@", [device valueForKey:@"cartProductName"]]];
        cell.tintColor = [UIColor orangeColor];
        if([self getCheckedForIndex:indexPath.row]==YES)
        {
            cell.accessoryType = UITableViewCellAccessoryCheckmark;
        }
        else
        {
            cell.accessoryType = UITableViewCellAccessoryNone;
        }
    
    
        return cell;
    }
    

    我希望有人可以帮助我。谢谢:))

1 个答案:

答案 0 :(得分:0)

回答你的Q1:

    if([[[NSUserDefaults standardUserDefaults] valueForKey:[self getKeyForIndex:index]] boolValue]==YES)

以上代码检查NSUserDefaults中的索引号。因此,您保存tags单元格对象/数组对象而不是数组索引号。

编辑:由于您使用的是Coredata,因此您可以在模型类中添加BOOL属性,例如:isChecked。 这样您的数据库也将具有复选标记信息。使用相同的方法在tableview中显示复选标记。 顺便说一下:当你使用NSUserDefaults时,为什么要使用CoreData。我的意思就像古老的说法:Penny wise Pound Foolish