是否可以获取存储在Core Data中的文件的路径,或者我是否只能提取文件本身?我需要在Core Data中存储为NSData属性的文件的路径,而不是数据库本身。一些iOS功能经常要求NSURL而不是文件本身,我还没有弄清楚如何将它与Core Data结合起来。
答案 0 :(得分:2)
如果您使用的是SQLite,则数据库中没有“文件”。数据库是单个文件。
如果要在数据库中存储二进制数据,则无法直接访问其下的文件(即使假设您使用外部存储作为选项)。
如果您希望直接访问Core Data下的SQLite数据库内的文件,那么您需要自己将其写入另一个文件。
答案 1 :(得分:0)
您可以通过以下方式获取相关的NSURL:
NSFileManager *fileManager = [NSFileManager defaultManager];
NSURL *documentsDirectory = [[fileManager URLsForDirectory:NSDocumentDirectory
inDomains:NSUserDomainMask] firstObject];
NSString *documentName = @"YOUR_DATABASE_NAME";
NSURL *url = [documentsDirectory URLByAppendingPathComponent:documentName];
要在更宏大的环境中查看它,通常是如何设置UIManagedDocument以使用Core Data:
NSFileManager *fileManager = [NSFileManager defaultManager];
NSURL *documentsDirectory = [[fileManager URLsForDirectory:NSDocumentDirectory
inDomains:NSUserDomainMask] firstObject];
NSString *documentName = @"YOUR_DATABASE_NAME";
NSURL *url = [documentsDirectory URLByAppendingPathComponent:documentName];
self.document = [[UIManagedDocument alloc] initWithFileURL:url];
BOOL fileExists = [fileManager fileExistsAtPath:[url path]];
if (fileExists) {
[self.document openWithCompletionHandler:^(BOOL success) {
if (success) {
self.context = self.document.managedObjectContext;
// Post notification so others can gather the document and context
[[NSNotificationCenter defaultCenter] postNotificationName:@"DatabaseReady"
object:self];
}
if (!success) NSLog(@"couldn't open file at %@", url);
}];
} else {
[self.document saveToURL:url
forSaveOperation:UIDocumentSaveForCreating
completionHandler:^(BOOL success) {
if (success) {
self.context = self.document.managedObjectContext;
// Post notification so others can gather the document and context
[[NSNotificationCenter defaultCenter] postNotificationName:@"DatabaseReady"
object:self];
}
if (!success) NSLog(@"couldn't open file at %@", url);
}];
}