保存 api Facebook 数据以在不同的 ViewController swift iOS 中使用

Posted

技术标签:

【中文标题】保存 api Facebook 数据以在不同的 ViewController swift iOS 中使用【英文标题】:Saving api Facebook data for use in different ViewController swift iOS 【发布时间】:2016-07-08 22:10:14 【问题描述】:

当用户登录时,我正在点击 Facebook 的图表以提取基本用户信息。我的问题是我如何使用 swift 以最佳方式保存/提取该信息,以便之后它在子视图控制器中持续存在(基本上所有登录后)。例如,我想在我的登录视图控制器中的登录屏幕(不在其中)之后,在整个应用程序中使用个人资料图片作为设置按钮,我有以下相关代码:

let userImageView: UIImageView = 
    let imageView = UIImageView()

    return imageView
()

let nameLabel: UILabel = 
    let label = UILabel()

    return label
()

然后:

func fetchProfile() 
    let parameters = ["fields": "email, first_name, last_name, picture.type(large)"]
    FBSDKGraphRequest(graphpath: "me", parameters: parameters).startWithCompletionHandler( (connection, user, requestError) -> Void in

        if requestError != nil 
            print(requestError)
            return
        

        var _ = user["email"] as? String
        let firstName = user["first_name"] as? String
        let lastName = user["last_name"] as? String

        self.nameLabel.text = "\(firstName!) \(lastName!)"

        var pictureUrl = ""

        if let picture = user["picture"] as? NSDictionary, data = picture["data"] as? NSDictionary, url = data["url"] as? String 
            pictureUrl = url

        

        let url = NSURL(string: pictureUrl)
        NSURLSession.sharedSession().dataTaskWithURL(url!, completionHandler:  (data, response, error) -> Void in
            if error != nil 
                print(error)
                return
            

            let image = UIImage(data: data!)
            dispatch_async(dispatch_get_main_queue(),  () -> Void in
                self.userImageView.image = image
            )

        ).resume()

    )

我需要做什么才能在我的第二个 ViewController 中访问它?据我所知,segues 只有在我在第一个 viewController 中有一个物理属性来推送它们时才有帮助。

谢谢

【问题讨论】:

【参考方案1】:

保存图像的最佳方式是使用 Documents Directory,因为 Core Data 并未针对像图像一样大的文件进行优化。您可能希望将照片保存在 Documents Directory 中......

func saveImageDocumentDirectory()
        let fileManager = NSFileManager.defaultManager()
        let paths = (NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0] as NSString).stringByAppendingPathComponent(*** Name of DocDir Image***)
        let image = // *** Your Facebook Image ***
        print(paths)
        let imageData = UIImageJPEGRepresentation(image!, 0.5)
        fileManager.createFileAtPath(paths as String, contents: imageData, attributes: nil)
    

然后在您的视图控制器中创建一个空的公共图像var fbImage:UIImage() 然后创建一个 getImage 函数和代码如下.....

    func getImage()

            let fileManager = NSFileManager.defaultManager()
            let imagePAth = (self.getDirectoryPath() as NSString).stringByAppendingPathComponent(*** Name of Your DocDir Image ***)
            if fileManager.fileExistsAtPath(imagePath)
                self.fbImage.image = UIImage(contentsOfFile: imagePath)
            else
                print("No Image Saved")
            
        

【讨论】:

以上是关于保存 api Facebook 数据以在不同的 ViewController swift iOS 中使用的主要内容,如果未能解决你的问题,请参考以下文章

在图形 api 调用期间无法将 facebook 提升对象字段添加到活动中以在 facebook 上发布广告

XMPP Android - 构建客户端以在 facebook 上聊天或 facebook 聊天集成

使用 API 获取 Facebook 头像并将其保存到项目文件夹

Facebook Graph API 2.5 - 无法访问好友

如何生成 iPhone 模拟器构建或 .zip 文件以在 Facebook 中提交以在 iOS 中进行审核

如何为我的 iOS 应用创建深层链接以在 Facebook 中使用?