gpt4 book ai didi

core-data - 删除 UIManagedDocument 的正确方法是什么?

转载 作者:行者123 更新时间:2023-12-04 04:38:43 26 4
gpt4 key购买 nike

我似乎找不到任何可靠的文档来解释删除 UIManagedDocument 的正确过程,特别是在 iCloud 选项已打开的情况下。

我了解此选项会删除此 fileURL 处的文件。如果不使用 iCloud,这似乎很好。

[[NSFileManager defaultManager] removeItemAtURL:fileURL error:&error];

如果使用 iCloud,CoreData 会在所有地方创建文件,包括在/Document/CoreDataUbiquitySupport 和 iCloud/CoreData 文件夹中。所以在这种情况下,我可以调用 removeUbiquitousContentAndPersistentStoreAtURL吗? UIManagedDocument 中的每个商店在调用 [NSFileManager removeItemAtURL] 之前.如果是这样,这是否记录在某处?
[NSPersistentStoreCoordinator removeUbiquitousContentAndPersistentStoreAtURL:storeURL
options:@{NSPersistentStoreUbiquitousContentNameKey:fileName,
NSMigratePersistentStoresAutomaticallyOption:@YES,
NSInferMappingModelAutomaticallyOption:@YES,
NSSQLitePragmasOption:@{ @"journal_mode" : @"DELETE" }}
error:&error];

最佳答案

这是我在这个问题上的两分钱。我尝试了 dtrotzjr 推荐的方法,但并没有取得很大的成功。似乎 removeUbiquitousContentAndPersistentStoreAtURL:options:error: 非常适合清除 UIManagedDocument 中的数据,但 Logs 文件夹仍然存在,我试图删除的文件的残余部分仍然存在。这是从 iCloud 或本地文档中完全删除 UIManagedDocument 的更简单方法:

+ (void)deleteDocumentURL:(NSURL *)url{
//if we have an iCloud Document, remove it from the UbiquitouseKeyValueStore
if ([self isiCloudURL:url]) {
[[NSUbiquitousKeyValueStore defaultStore] removeObjectForKey:[url lastPathComponent]];
}

//do the delete on another thread
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
NSFileCoordinator *coordinator = [[NSFileCoordinator alloc] initWithFilePresenter:nil];
NSError *coordinationError;

[coordinator coordinateWritingItemAtURL:url
options:NSFileCoordinatorWritingForDeleting
error:&coordinationError
byAccessor:^(NSURL *newURL) {
NSError *removeError;
//code for performing the delete
[[NSFileManager defaultManager] removeItemAtURL:newURL error:&removeError];

//if we have an iCloud file...
if ([self isiCloudURL:url]) {
//remove log files in CoreData directory in the cloud
NSURL *changeLogsURL = [[self urlForiCloudLogFiles] URLByAppendingPathComponent:[url lastPathComponent]];
[[NSFileManager defaultManager] removeItemAtURL:changeLogsURL error:&removeError];
}
}];
});
}

这几乎是斯坦福 CS193 类(class) 2012 中的代码 + changeLogs 文件夹的删除,它适用于本地和 iCloud 文档。如果您发现以这种方式执行删除有任何问题,请告诉我。

关于core-data - 删除 UIManagedDocument 的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19260222/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com