代码之家  ›  专栏  ›  技术社区  ›  Kuroiteiken

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

  •  2
  • Kuroiteiken  · 技术社区  · 8 年前

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

    AppGroups

    4 回复  |  直到 8 年前
        1
  •  3
  •   Eric Aya    5 年前

    Swift 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 {
            }
    
    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)")
                }
            }
    

    希望这会有所帮助。干杯

        2
  •  0
  •   Shehata Gamal    8 年前

    您需要在用户默认值中设置一个字典值,并在如下小部件中读取它

    var dic:[String:String] = ["DateStr":"ID"]
    

    获取小部件中的日期并读取默认值(如果存在),然后查找匹配的DateStr

    注意:每次打开应用程序时都要更新驾驶员信息中心

        3
  •  0
  •   Ahmad F    8 年前

    为此,我使用了appGroup。

    使用将数据从项目传输到的正确方法是什么 小部件?

    到目前为止,您所做的(应用程序分组)是您应该遵循的步骤之一。接下来,如中所述 App Extension Programming Guide - Sharing Data with Your Containing App :

    启用应用程序组后,应用程序扩展及其包含的应用程序 都可以使用 NSUserDefaults 向用户共享访问权限的API 首选项。要启用此共享,请使用 initWithSuiteName: 方法 要实例化新的NSUserDefaults对象, 传入标识符 共享组的

    因此,到目前为止,您要做的是让 UserDefautls .例如:

    if let userDefaults = UserDefaults(suiteName: "group.com.example.myapp") {
        userDefaults.set(true, forKey: "myFlag")
    }
    

    因此,您可以将其传递给小部件:

    if let userDefaults = UserDefaults(suiteName: "group.com.example.myapp") {
        let myFlag = userDefaults.bool(forKey: "myFlag")
    }
    

    并且您遵循相同的方法来传递数据,反之亦然(从小部件传递到项目)。

        4
  •  0
  •   logeshpalani31    4 年前

    在Xamarin表单中,我们需要使用DI将数据传递给ios项目,然后我们可以将其放入NSUserDefaults中 信息:分组应用程序是必填的

    Xamarin iOS项目-将数据放入NSUserDefaults

     var plist = new NSUserDefaults("group.com.test.poc", NSUserDefaultsType.SuiteName);
     plist.SetBool(true, "isEnabled");
     plist.Synchronize();
    

    今日扩展-从NSUserDefaults获取数据

    var plist = new NSUserDefaults("group.com.test.poc", NSUserDefaultsType.SuiteName);
    var result = plist.BoolForKey("isEnabled");
    Console.WriteLine($"The result of NSUserdefaults: logesh {result}");
    
    推荐文章