2015-04-03 6 views
1

Я добавляю группу приложений в свое приложение для совместного использования одного слоя между приложением и часами. Я использовал, чтобы скопировать plist из пакета в Документы, когда приложение впервые запустилось. Но с часами я теперь пытаюсь преобразовать его, чтобы сохранить его в контейнере, но он всегда кажется пустым. Цели включают группу приложений, и я использую правильное имя в своем коде. Что может пойти не так?Копирование plist в App Group Container - iOS 8

Старый Путь

// 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]; 
+0

СОК это хорошо, но я не видим никаких причин, почему вы не сможете напрямую использовать файл plist. Что именно происходит? Файл не написан? Написан пустой файл? Есть что-нибудь в «ошибке»? – gregheo

ответ

1

вы не можете поделиться PLIST в виде файла (или я просто не знаю об этой функции), вместо того, чтобы вы просто сгенерируйте новый экземпляр NSUserDefaults, который можно разделить между целями.

Посмотрите здесь: https://devforums.apple.com/message/977151#977151

или документацию компании Apple

https://developer.apple.com/library/prerelease/ios/documentation/General/Conceptual/ExtensibilityPG/ExtensionScenarios.html

  • В Центре членов компании Apple, в разделе 'идентификаторы> App групп' зарегистрировать новый App группы (например, group.de.myApp.sharedGroup)
  • В Центре пользователей Apple в разделе «Идентификаторы» идентификаторы приложений обновляют ваши идентификаторы приложений для целей, требующих шаринов g, чтобы использовать функцию «Группы приложений»
  • Восстановите все необходимые профили Provisioning и получите их в Xcode
  • Назад к Xcode: в разделе «Возможности» в каждой из ваших целей, которым необходимо обмениваться данными, установите «Группы приложений» на добавьте ранее зарегистрированную группу приложений.
  • Поговорите с разделяемым 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);