I am working with coredata for the first time and I have to restrict the sqlite db file from iCloud backup which is in documents directory and i have done it using the below code
-(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;
}
//Prevent iCloud to take backup of documents directory folder
- (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;
}
Now what i didn't understand is do we also need to restrict sqlite-wal and sqlite-shm files from icloud backup, if yes then how to restrict sqlite-wal and sqlite-shm files from icloud backup
And i want a solution without changing the sqlite db location from documents directory folder... how can we do it
Please correct if anything is wrong in the above code
Thanks in advance
Aucun commentaire:
Enregistrer un commentaire