sql liteファイルを削除して永続ストアを再度設定したいとします。以前のsqliteストアファイルを削除した後に永続ストアを再作成
+ (BOOL)saveAll {
// [self createStorage];
NSError *error = nil;
NSManagedObjectContext *managedObjectContext = [(WSSMobileAppsAppDelegate *)[[UIApplication sharedApplication] delegate] managedObjectContext];
if (![managedObjectContext save:&error]) {
NSLog(@"Error while saving %@", error);
return FALSE;
}
return TRUE;
}
をエラー:
Error while saving Error Domain=NSCocoaErrorDomain Code=134030 "The operation couldn’t be completed. (Cocoa error 134030.)" UserInfo=0x7195ac0 {NSAffectedStoresErrorKey=(
"<NSSQLCore: 0x714eee0> (URL: file://localhost/Users/.../Library/Application%20Support/iPhone%20Simulator/5.0/Applications/CEDB9019-1D64-4968-9BE7-57E1493B96EC/Documents/Port.sqlite)"
), NSUnderlyingError=0x7195a50 "The operation couldn’t be completed. (Cocoa error 4.)", NSFilePath=/Users/.../Library/Application Support/iPhone Simulator/5.0/Applications/CEDB9019-1D64-4968-9BE7-57E1493B96EC/Documents/Port.sqlite}
私だけ節約しながら、私はエラーを取得しています私はこの
- (void)reset {
// Release CoreData chain
self.managedObjectContext = nil;
self.managedObjectModel = nil;
self.persistentStoreCoordinator = nil;
// Delete the sqlite file
NSError *error = nil;
NSFileManager *fileManager = [NSFileManager defaultManager];
NSURL *storeUrl = [NSURL fileURLWithPath: [[self applicationDocumentsDirectory] stringByAppendingPathComponent: @"Port.sqlite"]];
if ([fileManager fileExistsAtPath:storeUrl.path]){
[fileManager removeItemAtURL:storeUrl error:&error];
}
self.managedObjectContext = [self managedObjectContext];
self.managedObjectModel = [self managedObjectModel];
self.persistentStoreCoordinator = [self persistentStoreCoordinator];
// handle error...
}
のような私のシーンをリセットしようとしています
//Explicitly write Core Data accessors
- (NSManagedObjectContext *) managedObjectContext {
if (managedObjectContext != nil) {
return managedObjectContext;
}
NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator];
if (coordinator != nil) {
managedObjectContext = [[NSManagedObjectContext alloc] init];
[managedObjectContext setPersistentStoreCoordinator: coordinator];
}
return managedObjectContext;
}
- (void) setManagedObjectContext:(NSManagedObjectContext *)managedObjectContext{}
- (NSManagedObjectModel *)managedObjectModel {
if (managedObjectModel != nil) {
return managedObjectModel;
}
managedObjectModel = [NSManagedObjectModel mergedModelFromBundles:nil] ;
return managedObjectModel;
}
-(void) setManagedObjectModel:(NSManagedObjectModel *)managedObjectModel{}
- (NSPersistentStoreCoordinator *)persistentStoreCoordinator {
if (persistentStoreCoordinator != nil) {
return persistentStoreCoordinator;
}
NSURL *storeUrl = [NSURL fileURLWithPath: [[self applicationDocumentsDirectory] stringByAppendingPathComponent: @"Port.sqlite"]];
NSError *error = nil;
persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]];
if(![persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeUrl options:nil error:&error]) {
NSLog(@"Could not create store .... %@", error);
/*Error for store creation should be handled in here*/
}
return persistentStoreCoordinator;
}
私のリセット機能を実行すると、エラーが発生します。私はその設定を考えました:
self.managedObjectContext = nil;
self.managedObjectModel = nil;
self.persistentStoreCoordinator = nil;
...問題を解決します。その後、すべてが再現されます。助けてください。
ありがとうございました。今はエラーはありませんが、リセットを実行すると何も格納されません。保存直後にフェッチする
if (![managedObjectContext save:&error]) {
NSLog(@"Error while saving %@", error);
return FALSE;
}
CoreDataPortService *c = [[CoreDataPortService alloc] init];
NSLog(@"Saved all.... got number of ports ... %d", [[c getPorts] count]);
私のリセット方法を実行しないと、すべてが正常に動作します。何が間違っていますか?
私はすべてのデータを削除したいと思っていたと思いました。いいえ?ファイルを削除し、メモリ内のmanagedObjectContextを削除すると、データはなくなります。ファイルを削除してメモリの内容から再作成しようとすると、別の方法が必要になります。私はあなたがなぜそれをしたいと思うのか本当に想像することはできません。永続ストアは、通常の場合に管理対象オブジェクトのコンテキスト内にあるものと同期しています。 – morningstar
データを削除します。ファイルを削除することも可能ですか?それは時々私がエンティティを変更するためです。 – pethel
あなたは「リセットを実行すると何も保存されません」と言った。あなたは何も保存されていない、つまりすべてが削除されないように思えます。あなたはあなたがリセットを実行し、次にオブジェクトを追加してから保存し、その後にオブジェクトがないということですか? – morningstar