2016-09-29 138 views
0

我需要一些幫助。我的帳戶下有兩個應用程序。在兩個iOS應用之間傳遞自定義對象

我需要將自定義對象從應用程序A傳遞給應用程序B.如何使用應用程序組來執行此操作?

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

那麼傳遞數據兩個應用程序的最新方式是什麼?

+0

'1與您的模型來創建自己的框架。 UIPasteboard','2.AirDrop','3。 URL Scheme','4。應用程序擴展程序https://lionhylra.wordpress.com/2015/09/17/inter-app-communication-in-ios/ – TonyMkenu

+0

如果您的應用程序在同一個應用程序組中,則可以在應用程序之間共享數據(iOS8 +) http://stackoverflow.com/questions/9425706/share-data-between-two-or-more-iphone-applications –

回答

1

在App A(保存對象)

  1. 在功能,點擊 「+」 添加一個應用程序組 enter image description here

  2. 在你的對象類,則需要延長你想分享的課程NSObject and NSCoding

    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") 
        } 
    } 
    
  3. 保存數據從您的應用

    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(GET對象)

  1. 添加相同的應用程序組作爲應用程序A(見1.1 )

  2. 在視圖控制器中,您想獲取應用程序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類,最好的做法是在它