문제

모든 레코드를 삭제하는 방법이 있습니까? 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];

삭제 한 후 다시 만들어내는 것을 잊지 마십시오.

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