我似乎无法找到任何可靠的文档来解释删除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];
答案 0 :(得分:2)
这是我在这个问题上的两分钱。我尝试了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课程2012的代码+ changeLogs文件夹的删除,它适用于本地和iCloud文档。如果您发现以这种方式执行删除有任何问题,请通知我。
答案 1 :(得分:1)
对于要在removeUbiquitousContentAndPersistentStoreAtURL:options:error:
课程上调用静态方法NSPersistentStoreCoordinator
的iCloud核心数据内容,请调用removeItemAtURL:error:
请参阅我的APManagedDocument
项目中的deleteManagedDocumentWithIdentifier:
。这是在ubiquitous_experiment
分支上,我目前正在进行最终确定,然后将其合并回主分支。