将 plist 复制到应用程序组容器 - iOS 8
Copying plist to App Group Container - iOS 8
我正在向我的应用程序添加一个应用程序组,以便在应用程序和手表之间共享一个 plist。当应用程序首次启动时,我曾经从捆绑包中复制一个 plist 到 Documents。但是我现在正在尝试将手表转换为保存到容器中,但它似乎总是空的。目标启用了应用程序组,我在代码中使用了正确的名称。可能出了什么问题?
老办法
// COPY PLIST TO DOCUMENTS
NSFileManager *fileManger=[NSFileManager defaultManager];
NSError *error;
NSArray *pathsArray = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES);
NSString *doumentDirectoryPath=[pathsArray objectAtIndex:0];
NSString *destinationPath= [doumentDirectoryPath stringByAppendingPathComponent:@"badger.com.vacations.plist"];
NSLog(@"plist path %@",destinationPath);
if (![fileManger fileExistsAtPath:destinationPath]){
NSString *sourcePath=[[[NSBundle mainBundle] resourcePath]stringByAppendingPathComponent:@"badger.com.vacations.plist"];
[fileManger copyItemAtPath:sourcePath toPath:destinationPath error:&error];
}
新方法 - 无效
// COPY PLIST TO CONTAINER
NSURL *containerURL = [[NSFileManager defaultManager] containerURLForSecurityApplicationGroupIdentifier:@"group.com.xxxxx.xxx.container"];
containerURL = [containerURL URLByAppendingPathComponent:@"name.com.data.plist"];
NSString *destinationPath= containerURL.path;
NSLog(@"destinationPath %@", containerURL);
NSString *sourcePath=[[[NSBundle mainBundle] resourcePath]stringByAppendingPathComponent:@"name.com.data.plist"];
[fileManger copyItemAtPath:sourcePath toPath:containerURL.path error:&error];
你不能将 plist 作为文件共享(或者我根本不知道这个功能),而你只是生成一个新的 NSUserDefaults 实例,它可以在目标之间共享。
看看这里:
https://devforums.apple.com/message/977151#977151
或 Apple 文档
- 在 Apple 会员中心,在 'Identifiers > App Groups' 下注册一个新的应用程序组(例如 group.de.myApp.sharedGroup)
- 在 Apple 会员中心的 'Identifiers > App IDs' 下,为需要共享的目标刷新您的应用程序 ID 以使用应用程序组功能
- 重新生成所有需要的配置文件并将它们放入 Xcode
- 回到Xcode:在你每个需要共享数据的target中'Capabilities'下,将'App Groups'设置为on,添加之前注册的App组。
- 像这样与可共享的 NSUserDefaults 容器对话:
商店物品:
NSUserDefaults *groupDefaults = [[NSUserDefaults alloc] initWithSuiteName:@"group.de.myApp.sharedGroup"];
[groupDefaults setInteger:1337 forKey:@"testEntry"];
[groupDefaults synchronize];
阅读资料:
NSUserDefaults *groupDefaults = [[NSUserDefaults alloc] initWithSuiteName:@"group.de.myApp.sharedGroup"];
NSInteger testEntry = [groupDefaults integerForKey:@"testEntry"];
NSLog(@"testEntry: %ld", (long)testEntry);
我正在向我的应用程序添加一个应用程序组,以便在应用程序和手表之间共享一个 plist。当应用程序首次启动时,我曾经从捆绑包中复制一个 plist 到 Documents。但是我现在正在尝试将手表转换为保存到容器中,但它似乎总是空的。目标启用了应用程序组,我在代码中使用了正确的名称。可能出了什么问题?
老办法
// COPY PLIST TO DOCUMENTS
NSFileManager *fileManger=[NSFileManager defaultManager];
NSError *error;
NSArray *pathsArray = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES);
NSString *doumentDirectoryPath=[pathsArray objectAtIndex:0];
NSString *destinationPath= [doumentDirectoryPath stringByAppendingPathComponent:@"badger.com.vacations.plist"];
NSLog(@"plist path %@",destinationPath);
if (![fileManger fileExistsAtPath:destinationPath]){
NSString *sourcePath=[[[NSBundle mainBundle] resourcePath]stringByAppendingPathComponent:@"badger.com.vacations.plist"];
[fileManger copyItemAtPath:sourcePath toPath:destinationPath error:&error];
}
新方法 - 无效
// COPY PLIST TO CONTAINER
NSURL *containerURL = [[NSFileManager defaultManager] containerURLForSecurityApplicationGroupIdentifier:@"group.com.xxxxx.xxx.container"];
containerURL = [containerURL URLByAppendingPathComponent:@"name.com.data.plist"];
NSString *destinationPath= containerURL.path;
NSLog(@"destinationPath %@", containerURL);
NSString *sourcePath=[[[NSBundle mainBundle] resourcePath]stringByAppendingPathComponent:@"name.com.data.plist"];
[fileManger copyItemAtPath:sourcePath toPath:containerURL.path error:&error];
你不能将 plist 作为文件共享(或者我根本不知道这个功能),而你只是生成一个新的 NSUserDefaults 实例,它可以在目标之间共享。
看看这里: https://devforums.apple.com/message/977151#977151
或 Apple 文档
- 在 Apple 会员中心,在 'Identifiers > App Groups' 下注册一个新的应用程序组(例如 group.de.myApp.sharedGroup)
- 在 Apple 会员中心的 'Identifiers > App IDs' 下,为需要共享的目标刷新您的应用程序 ID 以使用应用程序组功能
- 重新生成所有需要的配置文件并将它们放入 Xcode
- 回到Xcode:在你每个需要共享数据的target中'Capabilities'下,将'App Groups'设置为on,添加之前注册的App组。
- 像这样与可共享的 NSUserDefaults 容器对话:
商店物品:
NSUserDefaults *groupDefaults = [[NSUserDefaults alloc] initWithSuiteName:@"group.de.myApp.sharedGroup"];
[groupDefaults setInteger:1337 forKey:@"testEntry"];
[groupDefaults synchronize];
阅读资料:
NSUserDefaults *groupDefaults = [[NSUserDefaults alloc] initWithSuiteName:@"group.de.myApp.sharedGroup"];
NSInteger testEntry = [groupDefaults integerForKey:@"testEntry"];
NSLog(@"testEntry: %ld", (long)testEntry);