在两个 iOS 应用程序之间传递自定义对象

Posted

技术标签:

【中文标题】在两个 iOS 应用程序之间传递自定义对象【英文标题】:Passing custom objects between two iOS Apps 【发布时间】:2016-09-29 07:10:53 【问题描述】:

我需要一些帮助。我的帐户下有两个应用程序。

我需要将自定义对象从 App A 传递给 App B。如何使用应用组来做到这一点?

我看到使用 URL 方案是一种古老的方法。

那么两个应用程序传递数据的最新方式是什么?

【问题讨论】:

1. UIPasteboard, 2.AirDrop, 3. URL Scheme, 4. App Extension lionhylra.wordpress.com/2015/09/17/… 如果你的应用在同一个应用组,你可以在应用之间共享数据(ios8+)***.com/questions/9425706/… 【参考方案1】:

在您的应用程序 A 中(保存对象)

    在功能下,单击“+”添加应用组

    在您的 Object Class 中,您需要将要共享的类扩展为 NSObjectNSCoding

    class Person : NSObject, NSCoding 
        var nom: String
        var prenom: String
    
        required init(name: String, prenom: String) 
           self.nom = name
           self.prenom = prenom
        
    
        required init(coder decoder: NSCoder) 
            self.nom = decoder.decodeObject(forKey: "name") as? String ?? ""
            self.prenom = decoder.decodeObject(forKey: "prenom") as? String ?? ""
        
        func encode(with coder: NSCoder) 
            coder.encode(nom, forKey: "nom")
            coder.encode(prenom, forKey: "prenom")
        
    
    

    保存应用 A 中的数据

    override func viewDidLoad() 
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        let person = Person(name: "Ugo", prenom: "Marinelli")
        saveData(person: person)
    
    
    func saveData(person : Person)
        //Map Class to recognize it
        NSKeyedArchiver.setClassName("Person", for: Person.self)
    
        //Encode the object
        let personEncoded = NSKeyedArchiver.archivedData(withRootObject: person)
    
        //Push the object to the App Group
        UserDefaults(suiteName: "group.tag.testAppGroup")!.set(personEncoded, forKey: "FirstLaunch")
    
    

在您的应用 B 中(获取对象)

    添加与应用 A 相同的应用组(参见 1.1)

    在 View 控制器中你想要获取 App A 对象:

    override func viewDidLoad() 
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
    
        //Class Mapping
        NSKeyedUnarchiver.setClass(Person.self, forClassName: "Person")
    
        //Get The encoded data from App Group
        let personEncoded  = UserDefaults(suiteName: "group.tag.testAppGroup")!.object(forKey: "FirstLaunch") as! NSData
    
        //Decode to get our Person object
        let personDecoded = NSKeyedUnarchiver.unarchiveObject(with: personEncoded as Data) as? Person
    
        print(personDecoded?.prenom)
    
    

请注意,您需要在这两个文件中实现您的 Person 类,最佳做法是使用您的模型创建您自己的框架

【讨论】:

以上是关于在两个 iOS 应用程序之间传递自定义对象的主要内容,如果未能解决你的问题,请参考以下文章

在 C# 和非托管 C++ 之间传递自定义对象

通过父应用程序在模块之间传递自定义事件

使用自定义单元格在两个 UITableView 之间传递数据

使用自定义对象时在活动android之间传递数据时出错

通过意图在活动之间传递自定义对象时出错

iOS --- 通过openURL实现APP之间跳转并传递数据