【问题标题】:Passing custom objects between two iOS Apps在两个 iOS 应用程序之间传递自定义对象
【发布时间】:2016-09-29 07:10:53
【问题描述】:
我需要一些帮助。我的帐户下有两个应用程序。
我需要将自定义对象从 App A 传递给 App B。如何使用应用组来做到这一点?
我看到使用 URL 方案是一种古老的方法。
那么两个应用程序传递数据的最新方式是什么?
【问题讨论】:
标签:
ios
iphone
xcode
ios8
【解决方案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 类,最佳做法是使用您的模型创建您自己的框架