简体   繁体   English

iOS 键盘扩展(应用组)

[英]iOS Keyboard Extension(App Groups)

i have a question about Keyboard Extension .我有一个关于Keyboard Extension的问题。

Container app has many images.(ex > 100 images and total 100MB) and container app has saved using NSUserDefaults .容器应用程序有很多图像。(例如 > 100 个图像,总共 100MB)并且容器应用程序已使用NSUserDefaults保存。

like this:像这样:

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];

and keyboard app gets image data from NSUserDefaults .和键盘应用程序从NSUserDefaults获取图像数据。

Is it right way that container app send heavy size data to keyboard app?容器应用程序向键盘应用程序发送大量数据的方式是否正确?

In special case, when NSUserDefaults instance accesses method(objectForKey:) in keyboard app, keyboard app crashed.在特殊情况下,当NSUserDefaults实例访问键盘应用程序中的 method(objectForKey:) 时,键盘应用程序崩溃。

The special case is :特殊情况是:

if image data size in NSUserDefaults is bigger than about 30MB(not sure), keyboard app crashed and if the size is smaller than about 30MB, it works well.如果NSUserDefaults图像数据大小大于约 30MB(不确定),则键盘应用程序崩溃,如果大小小于约 30MB,则它运行良好。

Is there max size limit of NSUserDefaults? NSUserDefaults 是否有最大大小限制?

i just want like this app .我只想喜欢这个应用程序

i want to know that i control heavy size data in keyboard app.我想知道我在键盘应用程序中控制大尺寸数据。

1) First you have to write image in Shared document directory. 1)首先你必须在共享文档目录中写入图像。

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

2) Write Image to above shared Directory. 2) 将图像写入上述共享目录。

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

3) Exactly get this path to Keyboard Extension class same as above. 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.

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM