应用启动时加载用户配置文件,选择视图时崩溃,将 PFFile 转换为 UIImage

Posted

技术标签:

【中文标题】应用启动时加载用户配置文件,选择视图时崩溃,将 PFFile 转换为 UIImage【英文标题】:Load user profile when app starts, crash when view is selected, convert PFFile to UIImage 【发布时间】:2014-12-26 04:59:19 【问题描述】:

我正在为应用中的用户创建自定义配置文件。我在我的User 数据表中将个人资料图片存储为带有密钥"profilePicture" 的PFFile。我希望屏幕上的 UIImageView 是我创建的表中的用户个人资料图像。

这是我的代码。我想我可以在我的 viewDidLoad 函数中做到这一点。

@IBOutlet var profPic: UIImageView! = UIImageView()

override func viewDidLoad() 
    super.viewDidLoad()

    var query = PFQuery(className:"User")

    query.includeKey("profilePicture")

    query.findObjectsInBackgroundWithBlock
    
        (objects:[AnyObject]! , error:NSError!) -> Void in
        if error == nil
        
            self.profPic = PFUser.currentUser().objectForKey("profilePicture") as UIImageView
        
    

任何想法如何做到这一点?当我单击该视图时,我得到了常见的 xcode 错误,它会将您带到 xcode 并向您显示线程/堆栈错误。我要问的似乎很简单,我觉得我在查询时遇到了问题。

------------ 编辑1----------

这是我通过进一步玩得出的结果仍然相同。

    var profile:PFQuery = PFQuery(className:"Users")
    profile.findObjectsInBackgroundWithBlock
        
            (objects:[AnyObject]! , error:NSError!) -> Void in
            if error == nil
            
               let profPic = PFUser.currentUser().objectForKey("profilePicture") as UIImageView
            
    

------------ 编辑2 ----------

    @IBOutlet var profPic: UIImageView!


    var query = PFQuery(className:"Users")
    query.whereKeyExists("profilePicture")
    query.findObjectsInBackgroundWithBlock 
        (objects: [AnyObject]!, error: NSError!) -> Void in
        if error == nil 

            let image: UIImage = objects["profilePicture"] as PFFile
            self.profPic.image = image

        
        else 
            println("User has not profile picture")
        
    

错误是 PFFile 不能转换为 UIImage,我应该使用 PFImage 吗?我无法解决这个问题。谢谢。

这里是一些正在发生的事情的屏幕截图。

【问题讨论】:

您需要将错误文本添加到问题中。有两个原因。首先,它允许 Stack Overflow 和搜索引擎对文本进行索引。其次,它允许眼睛疲惫的人(比如我)阅读它。 0x10559d662: nopw %cs:(%rax,%rax) 就是它所说的。它不显示错误文本,除了我在屏幕截图中向您展示的内容@jww 我很确定 PFUser 没有 UIImageView 类型的对象存储在“profilePicture”中。如果您记录 PFUser.currentUser().objectForKey("profilePicture") 返回的内容会发生什么?另外,要在 imageView 中显示图像,您不会那样做。鉴于 someImage 是 UIImage,您将执行 self.profPic.image = someImage @cjwirth 您能否提供一些示例代码的答案,我想我明白您的意思,我无法理解,谢谢。 @kareem - 不幸的是,我无法阅读屏幕截图。所以我看不到错误信息,看不到堆栈跟踪,看不到有问题的指令周围的符号,也看不到前面的指令。此外,Stack Overflow 和搜索引擎无法索引这些内容,因为它们隐藏在屏幕截图中。 【参考方案1】:

感谢@cjwirth,由于某种原因,答案已被删除,为了让我的代码正常工作,这是需要做的。这显示了我在视图中放置 imageview 的当前用户个人资料图片。

@IBOutlet var profPic: UIImageView! = UIImageView()

override func viewDidLoad() 
    super.viewDidLoad()


    var query = PFQuery(className:"Users")
    query.whereKeyExists("profilePicture")
    query.findObjectsInBackgroundWithBlock 
        (objects: [AnyObject]!, error: NSError!) -> Void in
        if error == nil 
            if let imageFile = PFUser.currentUser().objectForKey("profilePicture") as? PFFile 
            imageFile.getDataInBackgroundWithBlock  (data: NSData!, error: NSError!) -> Void in
                    self.profPic.image = UIImage(data: data)

        
        else 
            println("User has not profile picture")
        
    

 

【讨论】:

以上是关于应用启动时加载用户配置文件,选择视图时崩溃,将 PFFile 转换为 UIImage的主要内容,如果未能解决你的问题,请参考以下文章

将 GeoFire 查询加载到 RecyclerView 时应用程序崩溃

频繁重新加载collectionView时崩溃

UIImage * 是 __NSCFArray 而不是 UIImage

加载 webview 时,SplitViewController 应用程序崩溃

如何在应用启动时加载其他选项卡的视图?

在应用程序启动时预加载 UITabBar 选项卡时出现问题(崩溃)