[英]iOS Keyboard Extension(App Groups)
我有一个关于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
实例访问键盘应用程序中的 method(objectForKey:) 时,键盘应用程序崩溃。
特殊情况是:
如果NSUserDefaults
图像数据大小大于约 30MB(不确定),则键盘应用程序崩溃,如果大小小于约 30MB,则它运行良好。
NSUserDefaults 是否有最大大小限制?
我只想喜欢这个应用程序。
我想知道我在键盘应用程序中控制大尺寸数据。
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.
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.