2016-09-29 2 views
0

J'ai besoin d'aide pour quelque chose. J'ai deux applications sous mon compte.Passage d'objets personnalisés entre deux applications iOS

Je dois passer un objet personnalisé de App A à App B. Comment puis-je faire cela en utilisant des groupes d'applications? J'ai vu que l'utilisation de schémas d'URL est une ancienne façon de le faire.

Alors, quelle est la nouvelle façon de transmettre des données deux applications?

+0

'1. UIPasteboard', '2.AirDrop',' 3. URL Scheme', '4. App Extension' https://lionhylra.wordpress.com/2015/09/17/inter-app-communication-in-ios/ – TonyMkenu

+0

Si votre application est dans le même groupe d'applications, vous pouvez partager des données entre les applications (iOS8 +) http://stackoverflow.com/questions/9425706/share-data-between-two-or-more-iphone-applications –

Répondre

1

DANS VOTRE APP A (ENREGISTRER OBJET)

  1. Sous capacités, cliquez sur "+" pour ajouter un groupe App enter image description here

  2. Dans votre classe d'objets, vous devez étendre la classe que vous souhaitez partager à NSObject et 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. Enregistrer les données de votre application 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") 
    } 
    

DANS VOTRE APP B (GET OBJECT)

  1. Ajouter le même groupe d'applications comme l'App A (voir 1.1

  2. Dans le contrôleur View, vous souhaitez obtenir l'objet 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) 
    } 
    

Notez que vous devez mettre en œuvre votre classe de personne dans les deux fichiers, la meilleure pratique serait de créer votre propre cadre avec votre modèle dans ce