문제

사용자가 + 버튼을 누르고 목록에 나타나고 싶은 항목을 입력하고 저장을 누르는 목록 앱이 있습니다. 테이블은 핵심 데이터로 저장됩니다. 유일한 문제는 셀이 테이프로 테이프 될 때 체크 마크를 표시하기를 원합니다. ive는 여러 선택을 활성화했습니다

UITableViewCell *thisCell = [tableView cellForRowAtIndexPath:indexPath]; 
if (thisCell.accessoryType == UITableViewCellAccessoryNone) {
    thisCell.accessoryType = UITableViewCellAccessoryCheckmark;  
} else {
    thisCell.accessoryType = UITableViewCellAccessoryNone;
} 
[tableView deselectRowAtIndexPath:indexPath animated:NO]; 

사용자가 종료 한 후 셀에 체크 마크가 지속되기를 원합니다. 나는 내 엔티티에서 "수표"라는 속성을 만들고 부울 유형을 주었지만 행을 쳤을 때 수표가 나타나고 지속되는 곳으로 만드는 방법을 모르겠습니다. 모든 도움은 대단히 감사하겠습니다. 감사

도움이 되었습니까?

해결책

이것이 내가하는 방법입니다. 주목할만한 점 : Coredata는 부울을 저장하지 않으므로 "부울"이라고 표시된 모든 속성은 유형입니다. NSNumber. Coredata 및 부울 값을 다룰 때 앞뒤로 전환해야합니다.

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    NSManagedObject *selectedObject = [self.fetchedResultsController objectAtIndexPath:indexPath];


    if ([[selectedObject valueForKey:@"isDone"] boolValue]) {
        [selectedObject setValue:[NSNumber numberWithBool:NO] forKey:@"isDone"];
    } else {
        [selectedObject setValue:[NSNumber numberWithBool:YES] forKey:@"isDone"];
    }
}

나는 내가있다 UITableViewController 대의원으로 설정하십시오 NSFetchedResultsController, 쿼리에서 관리 된 객체로 변경 한 결과 ^^^은 다음 두 가지 메소드를 실행하게됩니다.

- (void)controllerDidChangeContent:(NSFetchedResultsController *)controller {
    [self.tableView reloadData];
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    static NSString *defaultCellIdentifier = @"Item";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:defaultCellIdentifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:defaultCellIdentifier] autorelease];
    }

    NSManagedObject *item = [[self fetchedResultsController] objectAtIndexPath:indexPath];
    cell.textLabel.text = [item valueForKey:@"name"];

    if ([[item valueForKey:@"checks"] boolValue]) {
        cell.accessoryType = UITableViewCellAccessoryCheckmark;
    } else {
        cell.accessoryType = UITableViewCellAccessoryNone;
    }

    cell.selectionStyle = UITableViewCellSelectionStyleNone;

    return cell;
}

다음은 모든 것이 함께있는 방법입니다

  1. 사용자는 행을 클릭합니다
  2. TableView : DidSelectrow ... 메소드는 적절한 관리 객체의 "ISDONE"속성을 변경합니다.
  3. Fetched Results Controller는 관리되는 객체가 변경되었음을 알리고 controllerDidChangeContent 대의원에 대한 방법.
  4. 나의 controllerDidChangeContent 방법 테이블보기의 모든 데이터를 다시로드합니다.
  5. TableView가 다시로드되면 My TableView : CellForring ... 메소드는 관리 된 항목의 "ISDONE"속성을 확인하여 셀에 셀에 확인 표시가 있는지 여부를 확인합니다.

그리고 당신이 혼란스러워하지 않도록, 나는 처음에 일반적인 것을 사용했습니다. NSMangagedObject Row State를 저장하려면 내가 게시 한 첫 번째 방법이 말하는 이유입니다. [selectedObject valueForKey:@"isDone"]. 나중에 나는 서브 클래스 관리 객체로 전환했다 JKItem, 두 번째 방법 세트가 사용할 수있는 이유입니다. item.isDone 컴파일러 경고를 생성하지 않고.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top