2017-01-24 13 views
1

У меня есть вопрос о Keyboard Extension.Расширение клавиатуры iOS (группы приложений)

Приложение контейнера имеет много изображений. (Ex> 100 изображений и всего 100 МБ) и контейнерное приложение сохранилось с использованием NSUserDefaults.

так:

NSMutableArray* arr = [NSMutableArray new]; 

for(NSInteger i = 0; i < 100; i++) 
{ 
    UIImage* img = [UIImage imageNamed:[NSString stringWithFormat:@"img%ld",i]]; 
    NSData* data = UIImagePNGRepresentation(image); 
    [arr addObject:data] 
} 

NSUserDefaults* ud = [[NSUserDefaults alloc] initWithSuiteName:@"<group identifier>"]; 
[ud setObject:arr forKey:@"image_data"]; 
[ud synchronize]; 

и приложение клавиатуры получает данные изображения из NSUserDefaults.

Правильно ли это, что приложение-контейнер отправляет данные о больших размерах в приложение для клавиатуры?

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

Особый случай:

если размер данных изображения в NSUserDefaults больше, чем около 30MB (не уверен), приложение клавиатуры разбился, и если размер меньше чем около 30Мб, он работает хорошо.

Есть ли максимальный предел размера NSUserDefaults?

Я просто хочу this app.

Я хочу знать, что я контролирую данные большого размера в приложении клавиатуры.

+1

если вы хотите сохранить изображение, а затем сохранить в основных данных, чем NSUserdefault –

+0

консервной клавиатуры приложение ядра получить доступ к данным, которые сохранить контейнер приложение? – dh0rmfpdlxm

ответ

1

1) Сначала вы должны написать изображение в каталоге общих документов.

- (NSString *)getSharedLocationPath:(NSString *)appGroupName { 
    NSURL *groupContainerURL = [[NSFileManager defaultManager] containerURLForSecurityApplicationGroupIdentifier:@"group.yourGroupName"]; 
    return [groupContainerURL relativePath]; 
} 

2) Напишите изображение в общий общий каталог.

NSString *path = [[self getSharedLocationPath:@"group.yourGroupName"] stringByAppendingPathComponent:[NSString stringWithFormat:@"%@",images]]; 
    //Here fileData is your Image data. 
    [fileData writeToFile:path atomically:YES]; 

3) Точно получите этот путь к классу расширения клавиатуры, как указано выше.

- (NSString *)getSharedLocationPath:(NSString *)appGroupName { 
    NSURL *groupContainerURL = [[NSFileManager defaultManager] containerURLForSecurityApplicationGroupIdentifier:@"group.yourGroupName"]; 
    return [groupContainerURL relativePath]; 
} 
//Here get content of directory from shared document directory. 
NSArray *directoryContent = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:[self getSharedLocationPath:@"group.yourGroupName"] error:NULL]; 
    for (Count = 0; Count < (int)[directoryContent count]; Count++) 
    { 
     NSLog(@"File %d: %@", (Count + 1), [directoryContent objectAtIndex:Count]); 
    } 
//Now you get your images from app shared directory. 
+0

ой! я не знаю общий путь. я попробую это. спасибо спасибо – dh0rmfpdlxm

+0

общий путь используется для двух приложений для общих данных между ним из каталога документов. –

+0

Здесь @ "group.yourGroupName" заменяет ваше имя группы расширений. –