解析传递 PFUser 到 Watch 扩展
Posted
技术标签:
【中文标题】解析传递 PFUser 到 Watch 扩展【英文标题】:Parse Passing PFUser to Watch Extension 【发布时间】:2015-07-09 19:48:46 【问题描述】:我正在尝试将 PFUser.currentUser() 对象传递给 Apple Watch 扩展以加载一些数据。我知道我可以使用 App Groups 来做到这一点,但这需要激活本地数据存储并且我需要使用缓存。所以我在应用委托中实现了这段代码:
func application(application: UIApplication, handleWatchKitExtensionRequest userInfo: [NSObject : AnyObject]?, reply: (([NSObject : AnyObject]!) -> Void)!)
// retrieved parameters from Apple Watch
//println(userInfo["value1"])
//println(userInfo["value2"])
// pass back values to Apple Watch
var retValues = Dictionary<String,PFUser>()
retValues["retVal1"] = PFUser.currentUser()!
print(PFUser.currentUser()!)
reply(retValues)
但是应用程序崩溃并说 currentUser 的值为 nil:致命错误:在展开 Optional 值时意外发现 nil
func getCurrentUser()
var dict = ["test" : 4] //your dictionary/request to sent to the iPhone
if !WKInterfaceController.openParentApplication(dict, reply: (reply,error) -> Void in
println("\(reply)") //your reply data as Dictionary
if let passedCurrentUser: PFUser = reply["currentUser"] as? PFUser
self.currentUser = passedCurrentUser
self.getTrips()
)
println("ERROR")
PFUser.currentUser() 显然不是零。甚至不使用打印方法 print(PFUser.currentUser()!) 打印数据。
【问题讨论】:
【参考方案1】:想出了一个更简单的方法,使用应用组:
1) 在 Watch 目标和您的应用上启用应用组
2) 进入 AppDelegate 并插入:
let appGroupID = "group.com.xx"
let defaults = NSUserDefaults(suiteName: appGroupID)
defaults!.setObject(PFUser.currentUser()!.objectId, forKey: "theCurrentUser")
3) 在手表扩展中:
let appGroupID = "group.com.xx"
let defaults = NSUserDefaults(suiteName: appGroupID)
if let theCurrentUser = defaults?.stringForKey("theCurrentUser")
//do something
【讨论】:
以上是关于解析传递 PFUser 到 Watch 扩展的主要内容,如果未能解决你的问题,请参考以下文章
如何在watch app上访问PFUser.Current()