2014-03-12 4 views
3

내 애플리케이션에 핵심 데이터를 사용하고 있습니다. 4-5 테이블 중 하나는 userProfile 테이블입니다. 나는 앱에서 로그 아웃을 구현했다. 사용자가 사용자 프로필을 삭제하는 앱에서 로그 아웃 한 경우 다른 사용자 계정으로 로그인 한 경우 새 계정을 삽입합니다. 내가 userprofile 삭제에 대한 데이터베이스에서 모든 레코드를 삭제하고 싶습니다. 이 관계를 사용하여 메신저 있지만 사용자 프로필 레코드가 삭제 된 경우에도 데이터베이스에서 다른 레코드를 삭제하지 않습니다. 내가 언급하고자하는 한 가지는 모든 데이터가 서비스에서 나옵니다. 나는 계단식 삭제 규칙을 userprofile 테이블과 다른 테이블 사이에 생성 된 관계에 사용하고 있습니다.관계를 사용하여 코어 데이터 데이터베이스에서 모든 테이블 레코드 삭제

+1

모델 사진과 계단식으로 설정된 관계를 표시 할 수 있습니까? – Wain

+0

userProfile 이외의 테이블이 3 개 있습니다. 나는 나머지 테이블에 대해 정의한 모든 관계에 캐스케이드를 사용합니다. say UserProfile -> 기사는 계단식 규칙을 가지며 그 반대도 마찬가지입니다. –

+1

귀하의 관계는 양방향입니까? 양쪽 끝은 계단식입니까? – Wain

답변

4

두 가지 방법으로이를 수행 할 수 있습니다.

첫 번째는 저장소를 삭제하고 다시 만듭니다. 즉, 파일 시스템의 저장소에 액세스하고 sql 파일을 삭제하는 등의 작업을 의미합니다. 예를 들어 다음 토론에서 달성 방법을 찾을 수 있습니다 : Delete/Reset all entries in Core Data?.

두번째 해결책은 다른 것들에 연결한다 UserProfile 엔티티 연쇄 관계를 생성하는 것이다. 후자에서는 반비례 관계를 설정해야합니다 (무효화가 올바른 접근 방식입니다). 자세한 내용은 Setting up a parent-child relationship in Core Data에서 내 대답을 참조하십시오.

는이 말을, 내 경험을 바탕으로, 내가 코어 데이터에서 사용자 정보 (예를 들어, 암호)를 저장 억제한다. 대신 키 체인을 채택하십시오. 키 체인 접근을 손쉽게 감쌀 수있는 라이브러리가 있습니다 (예 : SSKeychain). 내가 캐스케이드 규칙을 사용하여 관계를 이용하려고했지만 나를 위해 일하지 않았다

4

그래서 나는 Delete/Reset all entries in Core Data 방법을 사용했다. 이를 위해 다음 코드를 사용합니다.

NSError * error; 
NSURL * storeURL = [[AppDelegate.managedObjectContext persistentStoreCoordinator] URLForPersistentStore:[[[AppDelegate.managedObjectContext persistentStoreCoordinator] persistentStores] lastObject]]; 
[AppDelegate.managedObjectContext lock]; 
[AppDelegate.managedObjectContext reset];//to drop pending changes 
//delete the store from the current managedObjectContext  
if ([[AppDelegate.managedObjectContext persistentStoreCoordinator] removePersistentStore: [[[AppDelegate.managedObjectContext persistentStoreCoordinator] persistentStores] lastObject] error:&error])  
{   
// remove the file containing the data 
[[NSFileManager defaultManager] removeItemAtURL:storeURL error:&error];  
//recreate the store like in the appDelegate method 
[[[AppDelegate managedObjectContext] persistentStoreCoordinator] addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options: @{NSMigratePersistentStoresAutomaticallyOption:@YES, NSInferMappingModelAutomaticallyOption:@YES} error:&error]; 
}  
[AppDelegate.managedObjectContext unlock]; 
//that's it ! 

이것은 나를 위해 일했습니다.

관련 문제