nsmanagedObjectContext에서 모든 레코드를 삭제하십시오
문제
모든 레코드를 삭제하는 방법이 있습니까? NSManagedObjectContext
?
데이터를 삽입하기 위해 다음 코드를 사용하고 있습니다.
NSManagedObjectContext * context = [[NSApp delegate] managedObjectContext];
NSManagedObject * basket = nil;
basket = [NSEntityDescription insertNewObjectForEntityForName:@"ShoppingBasket"
inManagedObjectContext: context];
[basket setValue:[firstSelectedObject valueForKey:@"accessoryID"]
forKey: @"accessoryID"];
모든 레코드를 어떻게 삭제합니까? "제거 :"기능과 같은 것을 원하지만 모든 것을 제거합니다.
해결책
주어진 엔티티의 모든 인스턴스를 삭제하려면 (쇼핑 바스켓을 사용하겠습니다), 모든 바구니를 가져 와서 삭제할 수 있습니다. 몇 줄의 코드 일뿐입니다.
NSManagedObjectContext * context = [self managedObjectContext];
NSFetchRequest * fetch = [[[NSFetchRequest alloc] init] autorelease];
[fetch setEntity:[NSEntityDescription entityForName:@"ShoppingBasket" inManagedObjectContext:context]];
NSArray * result = [context executeFetchRequest:fetch error:nil];
for (id basket in result)
[context deleteObject:basket];
비 문서 기반 앱의 대안은 데이터 저장소에 대한 연결을 종료하고 실제 파일을 삭제 한 다음 다시 연결하는 것입니다 (표준 핵심 데이터 프로젝트와 함께 제공되는 템플릿 코드는 없으면 파일이 없으면 자동으로 생성). 그런 다음 새롭고 빈 상점이 있습니다.
코드 예제는 가능한 오류를 무시합니다. 그렇게하지 마십시오. :-)
다른 팁
훨씬 더 빠른 방법은 저장소를 완전히 제거하는 것입니다. 이런 식으로 당신은 다른 대답과 마찬가지로 물건을 가져 오거나 그 물건을 열거하는 시간을 낭비하지 않습니다.
NSError *error;
NSURL *applicationDocumentsDirectory = [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject];
NSURL *storeURL = [applicationDocumentsDirectory URLByAppendingPathComponent:@"MyCDStore.sqlite"];
[[NSFileManager defaultManager] removeItemAtPath:storeURL.path error:&error];
삭제 한 후 다시 만들어내는 것을 잊지 마십시오.
제휴하지 않습니다 StackOverflow