我有一个主应用程序视图控制器,其中使用用户默认值设置和获取图像,如下所示:
animalcat = ["s1.jpg","s2.jpg","s3.jpg","s4.jpg"]
var appGroupDefaults1 = UserDefaults.standard appGroupDefaults1 = UserDefaults(suiteName:"group.testKeyboard.Emo")!
appGroupDefaults1.set(animalcat, forKey: "imageValue")
appGroupDefaults1.synchronize()
此图片必须在键盘扩展类文件中获取,但图像显示为nil。
在键盘扩展名中 -
let dataArray1 = appGroupDefaults1.object(forKey: "imageValue") print(dataArray1)
如何从主应用程序中获取图像并将其显示在键盘扩展名中,以便在加载键盘时显示?
答案 0 :(得分:0)
要启用数据共享,请使用Xcode或Developer门户为包含应用及其包含的应用扩展程序启用应用组。
阅读:Sharing Data with Your Containing App。
以下是需要遵循的一些重要步骤,
第1步:所有图片都应使用bundle在Extension / ContainingApp之间共享。 确保将捆绑包添加到两个目标。
第2步:在Extension / ContainingApp之间共享所有图像后,您可以获得两个目标中的所有图像。
第3步:确保根据Sharing Data with Your Containing App创建应用群组。
如果您正确执行上述步骤,则应该在Extension / ContainingApp中都有图像。
答案 1 :(得分:0)
请检查以下步骤: 1.要将图像从应用程序共享到扩展,您需要启用应用程序组并正确设置。 现在将所有图像保存在sharedContainer中,您可以看到以下代码。
let defaults = UserDefaults.init(suiteName:kAppGroupIdentifier)
var arrDefault = [String]()
var arrImages = [String]()
if (defaults?.object(forKey: "arrImg") != nil) {
arrDefault = defaults?.value(forKey: "arrImg") as! [String]
print("Array : \(String(describing: defaults?.object(forKey: "arrImg")))")
arrDefault.append(imgName)
}
else{
arrDefault.append(imgName)
}
arrImages.removeAll()
arrImages.append(contentsOf: arrDefault)
defaults?.set(arrImages, forKey: "arrImg")
并像这样获取它...... 2. let defaults = UserDefaults.init(suiteName:kAppGroupIdentifier)
var arrTemp = [String]()
if (defaults?.object(forKey: "arrImg") != nil) {
arrTemp = defaults?.value(forKey: "arrImg") as! [String]
print("Array of Image Name : \(String(describing: arrTemp))")}
此处kAppGroupIdentifier是您的appgroup标识符,您必须在保存和检索共享容器中的数据时使用此标识符。 " arrImg"是我获取图像阵列的关键。