在 swift 中将数据从项目传输到小部件

Kur*_*ken 3 widget ios swift

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

应用程序组

MAL*_*MAN 6

雨燕5

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

  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 {
        }
Run Code Online (Sandbox Code Playgroud)
  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)")
            }
        }
Run Code Online (Sandbox Code Playgroud)

希望这会有所帮助。干杯!