【问题标题】:iOS Keyboard Extension(App Groups)iOS 键盘扩展(应用组)
【发布时间】:2017-01-24 12:21:12
【问题描述】:

我有一个关于Keyboard Extension的问题。

容器应用有很多图片。(例如 > 100 张图片,总共 100MB) 并且容器应用程序已使用 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(不确定),则键盘应用程序崩溃,如果大小小于约 30MB,则运行良好。

NSUserDefaults 有最大尺寸限制吗?

我只想喜欢this app

我想知道我在键盘应用中控制大尺寸数据。

【问题讨论】:

  • 如果你想保存图像然后保存在核心数据中而不是 NSUserdefault
  • 键盘应用可以访问容器应用保存的核心数据吗?

标签: ios objective-c ios-app-group ios-keyboard-extension


【解决方案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.

【讨论】:

  • 哦!我不知道共享路径。我会试试这个。谢谢谢谢
  • 共享路径用于两个应用程序之间从文档目录共享数据。
  • Here @"group.yourGroupName" 替换为您的扩展应用组名称。
  • 如果您对我的回答感到满意,请投票或批准我的回答。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-12-19
  • 1970-01-01
  • 1970-01-01
  • 2016-02-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多