핵심 데이터에 확인 표시 상태를 어떻게 저장할 수 있습니까?
-
19-09-2019 - |
문제
사용자가 + 버튼을 누르고 목록에 나타나고 싶은 항목을 입력하고 저장을 누르는 목록 앱이 있습니다. 테이블은 핵심 데이터로 저장됩니다. 유일한 문제는 셀이 테이프로 테이프 될 때 체크 마크를 표시하기를 원합니다. 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;
}
다음은 모든 것이 함께있는 방법입니다
- 사용자는 행을 클릭합니다
- TableView : DidSelectrow ... 메소드는 적절한 관리 객체의 "ISDONE"속성을 변경합니다.
- Fetched Results Controller는 관리되는 객체가 변경되었음을 알리고
controllerDidChangeContent
대의원에 대한 방법. - 나의
controllerDidChangeContent
방법 테이블보기의 모든 데이터를 다시로드합니다. - TableView가 다시로드되면 My TableView : CellForring ... 메소드는 관리 된 항목의 "ISDONE"속성을 확인하여 셀에 셀에 확인 표시가 있는지 여부를 확인합니다.
그리고 당신이 혼란스러워하지 않도록, 나는 처음에 일반적인 것을 사용했습니다. NSMangagedObject
Row State를 저장하려면 내가 게시 한 첫 번째 방법이 말하는 이유입니다. [selectedObject valueForKey:@"isDone"]
. 나중에 나는 서브 클래스 관리 객체로 전환했다 JKItem
, 두 번째 방법 세트가 사용할 수있는 이유입니다. item.isDone
컴파일러 경고를 생성하지 않고.