应用启动时加载用户配置文件,选择视图时崩溃,将 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 时应用程序崩溃
UIImage * 是 __NSCFArray 而不是 UIImage