我找到了将扩展属性应用于数据库文件所需的必要代码,但是我在确定何时应用该属性时遇到了问题。我找到的信息表明,尝试在文件存在之前的某个点设置属性将确保设置在应用程序重新启动之前不会生效(并再次点击代码),但我不确定是否可以设置标记数据库是开放的,也不是在哪里,特别是保证在persistentStoreCoordinator
中打开文件。我正在使用为CoreData应用程序生成的标准方法结构(最初包含在AppDelegate
中,只是移动到一个单独的类以使支持多个db更容易):
- (NSPersistentStoreCoordinator *)persistentStoreCoordinator {
if (_persistentStoreCoordinator != nil) return _persistentStoreCoordinator;
NSError *error = nil;
_persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]];
if (![_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:_storeURL options:nil error:&error]) {
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
abort();
}
return _persistentStoreCoordinator;
}
我知道我将不得不在addSkipBackupAttributeToItemAtURL
上拨打_storeURL
(来自Apple示例代码),但我认为我还必须确定默认情况下创建的额外文件一个SQL数据库(或关闭数据库上的WAL)。此外,我不确定何时需要调用它以确保在第一次运行时正确标记文件。首先,我保证存储文件将在此方法返回之前存在,或者在使用它们之前或者在创建托管对象上下文之后是否创建它们等等?