快速将数据从项目传输到小部件 [英] Transfer data from project to widget in swift

查看:28
本文介绍了快速将数据从项目传输到小部件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在我的项目中,我需要将用户 ID 发送到 iOS 中的小部件.但是要做到这一点,我的用户需要打开应用程序一次.不开放,信息只保留1天,之后消失,widget停止显示信息,等待开放申请.为此,我使用了 appGroup.
将数据从我的项目传输到小部件的正确方法是什么?

At my project i need to send user id's to widget in iOS. But for do that, my user needs to open application once. Without opening, information stays only 1 day, after that it vanishes and widget stops showing information and await for opening application. For do that i used appGroup.
What is the correct way to use transfer data from my project to widget?

推荐答案

Swift 5

按照以下步骤将数据从宿主应用传递到扩展程序.

Follow these steps to pass data from the host app to extensions.

  1. 选择项目目标>能力 >添加新的应用组(如果您已为开发者帐户启用权限,否则请先启用该权限)
  2. 选择扩展目标并重复相同的操作.

if let userDefaults = UserDefaults(suiteName: "group.com.yourAppgroup") {
            createEventDic.removeAll()
            let eventDic = NSMutableDictionary()
            eventDic.setValue("YourString", forKey: "timeFontName")
            createEventDic.append(eventDic)
            
            let resultDic = try? NSKeyedArchiver.archivedData(withRootObject: createEventDic, requiringSecureCoding: false)
            userDefaults.set(resultDic, forKey: "setWidget")
            userDefaults.synchronize()

        } else {
        }

  1. 现在转到您的应用扩展程序并执行以下步骤以获取传递的数据.

if let userDefaults = UserDefaults(suiteName: "group.com.yourAppGroup") {
            guard let testcreateEvent = userDefaults.object(forKey: "testcreateEvent") as? NSData else {
                print("Data not found in UserDefaults")
                
                return
            }
            
            do {
                guard let eventsDicArray = try NSKeyedUnarchiver.unarchiveTopLevelObjectWithData(testcreateEvent as Data) as? [NSMutableDictionary] else {
                    fatalError("loadWidgetDataArray - Can't get Array")
                }
                
                for eventDic in eventsDicArray {
                    let timeFontName = eventDic.object(forKey: "timeFontName") as? String ?? ""
                    
                }
            } catch {
                fatalError("loadWidgetDataArray - Can't encode data: \(error)")
            }
        }

希望它会有所帮助.干杯!

Hopefully, it will help. Cheers!

这篇关于快速将数据从项目传输到小部件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆