解析传递 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()

为啥不解析在注销时重置 PFuser?

注册后向 PFUser 添加列?解析,斯威夫特

更改 PFUser 用户名,解析与 Facebook 集成

解析 PFUser.currentUser 返回 nil - Swift

带有解析的 iOS。 PFUser.currentuser() 没有被缓存。应用重启后返回 nil