在我的应用程序中,我必须存储核心数据数据库。我在xcode项目导航器中有一些包含默认数据(audiofiles,maptiles等)的组和文件夹。
我发现很多关于阻止文件备份的内容,例如: 我做了什么:
- (NSPersistentStoreCoordinator *)persistentStoreCoordinator
{
if (_persistentStoreCoordinator != nil) {
return _persistentStoreCoordinator;
}
NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"db.sqlite"];
NSLog(@"%@", storeURL.path);
NSError *error = nil;
_persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]];
//NSDictionary *options = @{NSMigratePersistentStoresAutomaticallyOption:@YES, NSInferMappingModelAutomaticallyOption:@YES};
/*NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:
[NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption,
[NSNumber numberWithBool:YES], NSInferMappingModelAutomaticallyOption, nil];*/
if (![_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:nil error:&error]) {
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
abort();
}
[self addSkipBackupAttributeToItemAtURL:storeURL];
return _persistentStoreCoordinator;
}
- (NSURL *)applicationDocumentsDirectory
{
return [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject];
}
防止方法:
- (BOOL)addSkipBackupAttributeToItemAtURL:(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;
}
(最低目标iOS版本为7.0)
这够了吗?我如何检查应用程序现在是否阻止备份核心数据库?
在我添加addSkipBackupAttributeToItemAtURL
方法之前,我检查了应用程序存储空间,但未在文档和数据下找到任何内容。我只在备份下找到3.1 MB - >我的手机
- Install and launch your app
- Go to Settings > iCloud > Storage & Backup > Manage Storage
- If necessary, tap "Show all apps"
- Check your app's storage
答案 0 :(得分:6)
你做得对。 在Apple Technical Q&A 1719: How do I prevent files from being backed up to iCloud and iTunes?之后,您应该使用“不备份”属性进行标记。
对于NSURL
个对象,添加NSURLIsExcludedFromBackupKey
属性以防止备份相应的文件。对于CFURLRef
个对象,请使用相应的kCFURLIsExcludedFromBackupKey
属性。
要知道更适合存储Core Data数据库的文件夹,您可以查看iOS Data Storage Guidelines。