프로젝트 목록을 표시하는 UItableView가 있습니다. 이 프로젝트 목록을 선택 및 선택 취소 할 수 있습니다.
사용자가 tableview에서 항목을 선택하면 해당 사전을 내 coredata에 추가합니다.
사용자가 테이블 뷰에서 항목을 선택 취소하면 코어 데이터에서 해당 사전을 삭제합니다.
내가 선택할 때마다 coredata 객체를 기록하고 선택 취소하면 모든 것이 잘 작동하므로 항목 3을 선택 취소하면 항목 3을 선택 취소하면 1과 2 만 기록합니다.
그래서 나는 그 기능이 잘 작동한다는 것을 알고 있습니다. 이제 내가 구현 한 다음으로 잘못되는 비트는 tableview가 표시 될 때 내 coredata에서 항목이 있는지 확인한 다음 현재 셀과 관련된 항목을 찾을 때 액세서리 틱을 추가하는 것입니다. 이것은 이미 핵심 데이터에 저장 한 값을 표시하기위한 것입니다.
이제 이상한 것은 이전에 coredata에서 항목 3을 제거하고 coredata 값을 읽고 1 & 2 만 존재하는 것을 확인하여 확인했습니다. 그런 다음 애플리케이션을 다시 빌드하여 뷰가로드 될 때 틱을 할당하는 함수가 제대로 작동하는지 확인합니다. 뷰가로드되면 항목 1 2 및 3이 모두 다시 선택됩니다.
내가 뭘 잘못하고 있는지 잘 모르겠지만 이것은 선택 취소시 호출되는 핵심 데이터 삭제 기능입니다.
// Deleting values/tables from coredata entity
- (void)deleteSingleObject:(NSString *)entityDescription Dictionary:(NSDictionary *)dictionary {
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:entityDescription inManagedObjectContext:__managedObjectContext];
[fetchRequest setEntity:entity];
NSString *projectIDString = [dictionary objectForKey:@"ProjectID"];
NSPredicate *p=[NSPredicate predicateWithFormat:@"projectID == %@",projectIDString];
[fetchRequest setPredicate:p];
NSError *error;
NSArray *items = [__managedObjectContext executeFetchRequest:fetchRequest error:&error];
for (NSManagedObject *product in items) {
[__managedObjectContext deleteObject:product];
}
}
뷰가로드 될 때 틱을 할당하는 방법입니다.
// check if cell needs accessorytick
for (int i = 0; i < [projectListReadFromCoreDataMutableArray count]; i++) {
NSDictionary *tempReadCoreDataDictionary = [projectListReadFromCoreDataMutableArray objectAtIndex:i];
if ([[tempReadCoreDataDictionary objectForKey:@"ProjectID"] isEqualToString:[projectDictionary objectForKey:@"ProjectID"]]) {
projectListCustomCell.accessoryType = UITableViewCellAccessoryCheckmark;
}
}
어떤 도움이라도 대단히 감사하겠습니다. 더 많은 정보 나 코드가 필요하면 알려주세요.하지만 이것이 작동하지 않는 이유라고 생각하는 두 가지 핵심 부분입니다.
관리 개체 컨텍스트에서 개체를 삭제하지만 이러한 수정 사항을 영구 저장소에 저장하지 않습니다.
문서 인용
컨텍스트가 저장 될 때까지 새 객체가 저장소에 저장되지 않는 것처럼 삭제 된 객체는 컨텍스트가 저장 될 때까지 저장소에서 제거되지 않습니다.
이것이 애플리케이션을 다시로드 할 때 개체가 다시있는 이유입니다.
MOC를 영구 저장소에 저장하여 삭제를 영구적으로 만들어야합니다.
NSError *error = nil;
if (![_managedObjectContext save:&error]) {
// handle error
}
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다