Добро пожаловать в 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
Вы все еще можете удалить файл программно, используя метод 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решение
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 Удалите sqlite из вашего fileURLPath, а затем выполните сборку.
Вы можете удалить файл 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);
}
}
Я решил делать это таблица за таблицей, потому что это заставляет меня подтвердите, поскольку я занимаюсь программированием, что удаление содержимого таблицы является разумным, и нет данных, которые я бы предпочел сохранить.
Это будет намного медленнее, чем просто удаление файла, и я перейду на удаление файла если этот метод занимает слишком много времени.
Удалить файл постоянного хранилища и настроить новый координатор постоянного хранилища?
Я написал метод 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.
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()
}
}