Удалить/Сбросить все записи в Базовых Данных?

Добро пожаловать в Stackoverflow,

, если вы хотите преобразовать шестнадцатеричное значение в простое целое число, вы можете использовать:

int i = Integer.parseInt("5F", 16);
System.out.println(i); // will print 95

И если вы хотите, чтобы ваше простое целое число было преобразовано в двоичная строка, которую вы можете использовать:

String j = Integer.toBinaryString(i); // from the above variable j which contains 95
System.out.println(j); // will print 1011111
229
задан Honey 17 December 2018 в 11:15
поделиться

7 ответов

Вы все еще можете удалить файл программно, используя метод NSFileManager: removeItemAtPath ::.

NSPersistentStore *store = ...;
NSError *error;
NSURL *storeURL = store.URL;
NSPersistentStoreCoordinator *storeCoordinator = ...;
[storeCoordinator removePersistentStore:store error:&error];
[[NSFileManager defaultManager] removeItemAtPath:storeURL.path error:&error];

Затем просто добавьте постоянное хранилище обратно, чтобы убедиться, что оно воссоздано правильно.

Программный способ итерации по каждой сущности медленнее и подвержен ошибкам. Это можно использовать, если вы хотите удалить одни объекты, а не другие. Однако вам все равно необходимо убедиться, что вы сохранили ссылочную целостность, иначе вы не сможете сохранить свои изменения.

Простое удаление хранилища и его воссоздание - это быстро и безопасно, и, безусловно, может быть выполнено программно во время выполнения.

] Обновление для iOS5 +

С введением внешнего двоичного хранилища (allowExternalBinaryDataStorage или Хранить в файле внешней записи) в iOS 5 и OS X 10.7 простого удаления файлов, на которые указывает storeURL, недостаточно. Вы оставите файлы внешних записей. Поскольку схема именования этих файлов внешних записей не является общедоступной, у меня пока нет универсального решения. - an0 8 мая 2012, 23:00

и, безусловно, может выполняться программно во время выполнения.

Обновление для iOS5 +

С введением внешнего двоичного хранилища (allowExternalBinaryDataStorage или Store in External Record File) в iOS 5 и OS X 10.7 простое удаление файлов, на которые указывает storeURL, не довольно. Вы оставите файлы внешних записей. Поскольку схема именования этих файлов внешних записей не является общедоступной, у меня пока нет универсального решения. - an0 8 мая 2012, 23:00

и, безусловно, может выполняться программно во время выполнения.

Обновление для iOS5 +

С введением внешнего двоичного хранилища (allowExternalBinaryDataStorage или Store in External Record File) в iOS 5 и OS X 10.7 простое удаление файлов, на которые указывает storeURL, не довольно. Вы оставите файлы внешних записей. Поскольку схема именования этих файлов внешних записей не является общедоступной, у меня пока нет универсального решения. - an0 8 мая 2012, 23:00

Универсального решения пока нет. - an0 8 мая 2012, 23:00

Универсального решения пока нет. - an0 8 мая 2012, 23:00

197
ответ дан 23 November 2019 в 03:42
поделиться

решение

public static func reset() {
    let coordinator = _persistentContainer.persistentStoreCoordinator
    for store in coordinator.persistentStores where store.url != nil {
        try? coordinator.remove(store)
        try? FileManager.default.removeItem(atPath: store.url!.path)
    }
}
Swift 5.1
0
ответ дан 23 November 2019 в 03:42
поделиться

Удалите sqlite из вашего fileURLPath, а затем выполните сборку.

0
ответ дан 23 November 2019 в 03:42
поделиться

Вы можете удалить файл SQLite, но я предпочитаю делать это, очищая таблицы по отдельности с помощью функций:

- (void) deleteAllObjects: (NSString *) entityDescription  {
    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
    NSEntityDescription *entity = [NSEntityDescription entityForName:entityDescription inManagedObjectContext:_managedObjectContext];
    [fetchRequest setEntity:entity];

    NSError *error;
    NSArray *items = [_managedObjectContext executeFetchRequest:fetchRequest error:&error];
    [fetchRequest release];


    for (NSManagedObject *managedObject in items) {
        [_managedObjectContext deleteObject:managedObject];
        DLog(@"%@ object deleted",entityDescription);
    }
    if (![_managedObjectContext save:&error]) {
        DLog(@"Error deleting %@ - error:%@",entityDescription,error);
    }

}

Я решил делать это таблица за таблицей, потому что это заставляет меня подтвердите, поскольку я занимаюсь программированием, что удаление содержимого таблицы является разумным, и нет данных, которые я бы предпочел сохранить.

Это будет намного медленнее, чем просто удаление файла, и я перейду на удаление файла если этот метод занимает слишком много времени.

140
ответ дан 23 November 2019 в 03:42
поделиться

Удалить файл постоянного хранилища и настроить новый координатор постоянного хранилища?

0
ответ дан 23 November 2019 в 03:42
поделиться

Я написал метод clearStores, который проходит через каждый магазин и удаляет его как из координатора, так и из файловой системы (обработка ошибок оставлена в стороне):

NSArray *stores = [persistentStoreCoordinator persistentStores];

for(NSPersistentStore *store in stores) {
    [persistentStoreCoordinator removePersistentStore:store error:nil];
    [[NSFileManager defaultManager] removeItemAtPath:store.URL.path error:nil];
}

[persistentStoreCoordinator release], persistentStoreCoordinator = nil;

Этот метод находится внутри класса coreDataHelper, который заботится (среди прочего) о создании persistentStore, когда он nil.

38
ответ дан 23 November 2019 в 03:42
поделиться

Swift 4/5, iOS 9 +

Восстановление целого CoreData файл SQLite удостоверится, что все данные стираются, поэтому все объекты удалены. Просто звоните deleteAndRebuild().

class CoreDataStack {
    // Change this
    static let datamodelName = "ProjectName"
    static let storeType = "sqlite"

    static let persistentContainer = NSPersistentContainer(name: datamodelName)
    private static let url: URL = {
        let url = FileManager.default.urls(for: .applicationSupportDirectory, in: .userDomainMask)[0].appendingPathComponent("\(datamodelName).\(storeType)")

        assert(FileManager.default.fileExists(atPath: url.path))

        return url
    }()

    static func loadStores() {
        persistentContainer.loadPersistentStores(completionHandler: { (nsPersistentStoreDescription, error) in
            if let error = error {
                fatalError(error.localizedDescription)
            }
        })
    }

    static func deleteAndRebuild() {
        try! persistentContainer.persistentStoreCoordinator.destroyPersistentStore(at: url, ofType: storeType, options: nil)

        loadStores()
    }
}
0
ответ дан 23 November 2019 в 03:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: