我正在與coredata第一次,我必須限制從文件目錄中的iCloud備份sqlite數據庫文件,我已經使用下面的代碼限制從icloud備份sqlite-wal和sqlite-shm
-(id)init
{
if((self = [super init]))
{
NSURL* documentsDirectoryURL = [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject];
NSURL* modelURL = [[NSBundle mainBundle] URLForResource:@"Model" withExtension:@"momd"];
NSURL* giveForwardSqliteURL = [documentsDirectoryURL URLByAppendingPathComponent:@"InfoCollection.sqlite"];
NSError* error;
m_managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL];
m_persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:m_managedObjectModel];
NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:
[NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption,
[NSNumber numberWithBool:YES], NSInferMappingModelAutomaticallyOption, nil];
if ([m_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:giveForwardSqliteURL options:options error:&error])
{
m_managedObjectContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSMainQueueConcurrencyType];
[m_managedObjectContext setPersistentStoreCoordinator:m_persistentStoreCoordinator];
[self addSkipBackupAttributeToItemAtPath:giveForwardSqliteURL];
}
else
{
NSLog(@"Failed to create or open database: %@", [error userInfo]);
return nil;
}
}
return self;
}
//防止iCloud中取文件目錄文件夾的備份
- (BOOL)addSkipBackupAttributeToItemAtPath:(NSURL *) URL
{
assert([[NSFileManager defaultManager] fileExistsAtPath: [URL path]]);
NSError *error = nil;
BOOL success = [URL setResourceValue: [NSNumber numberWithBool: YES]
forKey: NSURLIsExcludedFromBackupKey error: &error];
if(!success){
NSLog(@"Error excluding %@ from backup %@", [URL lastPathComponent], error);
}
return success;
}
現在我不明白的是,我們做的還需要限制的sqlite-沃爾瑪和SQLite,SHM文件從iCloud雲備份,如果是,那麼如何限制sqlite-wal和sqlite-s從iCloud雲備份HM文件
,我想在不改變從文件目錄文件夾sqlite的DB位置的解決方案......我們怎麼能做到這一點
請更正如果有什麼是錯在上面的代碼
在此先感謝
你解決這個問題? – lukya
如果我們需要跳過它們,爲'wal'和'shm'文件創建URL並將它們傳遞給add skip屬性方法應該非常簡單。問題是我們需要做到這一點,如果是的話,因爲這些文件可能不會在創建持久性存儲庫時創建。此外,WAL日誌定期合併到主數據庫並重新創建等。我們如何跟蹤這些更改? – lukya
@lukya我沒有得到任何線索怎麼辦,如果我離開它會發生什麼..所以我添加了這些行'if([[NSFileManager defaultManager] fileExistsAtPath:[sqliteShmURL path]]){self addSkipBackupAttributeToItemAtPath:sqliteShmURL]; } if([[NSFileManager defaultManager] fileExistsAtPath:[sqliteWalURL path]]){self addSkipBackupAttributeToItemAtPath:sqliteWalURL]; }' – kumar