Я хочу очистить хранилище данных, удалив файл sqlite приложения.Я написал эту функцию в своем классе вспомогательных данных:
-(void) resetPersistenStore {
NSError *error = nil;
[persistentStoreCoordinator_ release];
NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"MyApp.sqlite"];
[[NSFileManager defaultManager] removeItemAtURL:storeURL error:&error];
if (error) {
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
}
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();
}
managedObjectModel_ = nil;
}
Я поместил следующий тест в UIApplication :: didFinishLaunchingWithOptions
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
/* test */
[TestDataHelper populateTestData:[self managedObjectContext]];
[TestDataHelper populateTestData:[self managedObjectContext]];
[self resetPersistenStore];
[TestDataHelper populateTestData:[self managedObjectContext]];
[TestDataHelper testPopulateTestData:[self managedObjectContext]];
Вместо одного набора данных, созданного функцией populateTestData,Я могу видеть фактически три набора данных (потому что я трижды вызывал функцию)
Понятно, что resetPersistenStore () работает, потому что без него данные будут накапливаться.
Таким образом, мой вопрос:
Почему сброс не вступает в силу немедленно?
Я установил managedObjectContext равным nil в функции сброса, ноэто не помогло.
Вот моя функция populateTestData
+(void)populateTestData:(NSManagedObjectContext*)managedObjectContext {
Stock* s1 = (Stock*)[NSEntityDescription insertNewObjectForEntityForName:@"Stock"
inManagedObjectContext:managedObjectContext];
s1.code = @"ABC2";
s1.name = @"ABC";
s1.enteredBy = @"akong";
[managedObjectContext save:&error];
if (error) {
NSLog(@"Data error %@", [error description]);
} else {
NSLog(@"Init completed");
}
}