在两个 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 中,您需要将要共享的类扩展为 NSObject 和 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")
保存应用 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 应用程序之间传递自定义对象的主要内容,如果未能解决你的问题,请参考以下文章