すべてのユーザー情報を削除して再作成する必要があります。私はすべてのものを作成するために使用するコードは、アプリケーションデリゲートである:CoreDataを再作成する際のコンテキストの問題
- (NSManagedObjectContext *)managedObjectContext {
if (managedObjectContext != nil) {
return managedObjectContext;
}
NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator];
if (coordinator != nil) {
managedObjectContext = [[NSManagedObjectContext alloc] init];
[managedObjectContext setPersistentStoreCoordinator:coordinator];
}
return managedObjectContext;
}
- (NSPersistentStoreCoordinator *)persistentStoreCoordinator {
if (persistentStoreCoordinator != nil) {
return persistentStoreCoordinator;
}
NSString* dir = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,
NSUserDomainMask, YES) lastObject];
NSURL *storeURL = [NSURL fileURLWithPath: [dir stringByAppendingPathComponent:
@"Data.sqlite"]];
NSError *error = nil;
persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc]
initWithManagedObjectModel:[self managedObjectModel]];
if (![persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType
configuration:nil URL:storeURL options:nil error:&error]) {
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
abort();
}
return persistentStoreCoordinator;
}
その後、私はすべてのものを削除します。
[context reset];
NSString* dir = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,
NSUserDomainMask, YES) lastObject];
NSURL *storeURL = [NSURL fileURLWithPath: [dir stringByAppendingPathComponent:
@"Data.sqlite"]];
NSError *error;
NSURL *storeURL = store.URL;
NSPersistentStoreCoordinator *storeCoordinator = [((CustomAppDelegate *)[[UIApplication sharedApplication] delegate]) persistentStoreCoordinator];
NSPersistentStore *store = [[storeCoordinator persistentStores] objectAtIndex:0];
[storeCoordinator removePersistentStore:store error:&error];
[[NSFileManager defaultManager] removeItemAtPath:storeURL.path error:&error];
[storeCoordinator release];
storeCoordinator = nil;
そして、動作するようです私が保存しようとすると、問題がです新しいデータ、その後。私が好きな何かを行う場合:それは保存afterContextにクラッシュし
NSManagedObjectContext *afterContext = [appDelegate managedObjectContext];
NSEntityDescription *userEntity = [NSEntityDescription entityForName:@"User"
inManagedObjectContext:afterContext];
NSManagedObject *user = [NSEntityDescription
insertNewObjectForEntityForName:[userEntity name] inManagedObjectContext:afterContext];
[user setValue:@"John" forKey:@"firstName"];
if(![afterContext save:&error])
NSLog(@"oops");
を、それは私にEXC_BAD_INSTUCTION例外をgaves。私は [appDelegate managedObjectContext]を実行すると、新しいpersistentStoreが作成されるので、何が問題か分かりません。以前のオブジェクトへの参照ですか? stacktraceは何の手がかりも与えません。
チップありがとう!デリゲートですべてを行うことと、コンテキストnil(後で再作成)を設定することですべてが解決されました。 PS:あなたの答えは、私がポインタについて考えるようにしたのです。なぜ、私はデリゲートでそれをする必要があったのですか。本当にありがとう! – ferostar