如何将 UIImages 添加到我的 PFFile 数组,以便如果查询 PFFIle 图像失败,可以通过附加 UIImage 来替换它?
how can I add UIImages to my PFFile array so that if query for a PFFIle images fails, it can be replaced by appending an UIImage?
从 Parse 检索图像并将它们显示在 tableView 上,如果我向下滚动 tableView,应用程序崩溃并给我 "fatal error: Array index out of range"
行数由 "messagesArray"
中的消息数给出
我认为问题是在查询中,如果我没有在指针中找到图像,我会说 "append to the PFFile
array this standard UIImage
of mine called "logo" " 所以当我向下滚动时,imagesArray 和 messagesArray 的计数不匹配.
如何将 UIImages 添加到我的 PFFile 数组,以便在查询 PFFIle 图像失败时,可以通过附加 UIImage 来替换它?
有些人告诉我对 dispatch_async(dispatch_get_main_queue()) {}
中的图像进行单独查询
但主查询本身就是这样调用的。
我有这个数组:
var picturesArray : [PFFile] = []
在 cellForRowAtIndexPath
我有:
self.picturesArray[indexPath.row].getDataInBackgroundWithBlock { (imageData: NSData?, error:NSError?) -> Void in
if error == nil {
let image = UIImage(data: imageData!)
cell.senderProfileImage?.image = image
} else {
print("plan B")
cell.senderProfileImage?.image = UIImage(named: "logo")
}
}
在我的查询中,我可以通过查询带有指向 _Users
的指针的 "sender" 列来检索发件人的姓名。我有:
if let theName = singleObject.objectForKey("sender")?.objectForKey("first_name") as? String {
// this retrieves names from pointer "sender" in "Messages"
self.sendersArray.append(theName) //populate the array with names
} else {
if let messageSender = singleObject["senderNickname"] as? String {
self.sendersArray.append(messageSender)
}
}
if let profilePicture = singleObject.objectForKey("sender")?.objectForKey("profile_picture") as? PFFile {
self.picturesArray.append(profilePicture)
} else {
//I think this is the problem:
print("no image found in pointer to users")
self.picturesArray.append(UIImage(named: "logo"))
}
解决方案:
目前,还需要修复 错误(希望 Apple 和 Parse 迟早会解决它们)
//very new, it's ok
if let theName = singleObject.objectForKey("sender")?.objectForKey("first_name") as? String {
// this retrieves names from pointer "sender" in "Messages"
self.sendersArray.append(theName) //populate the array with names
} else {
if let messageSender = singleObject["senderNickname"] as? String {
self.sendersArray.append(messageSender)
}
}
//very new : this fix fatal error: Array index out of range
if let profilePicture = singleObject.objectForKey("sender")?.objectForKey("profile_picture") as? PFFile {
self.picturesArray.append(profilePicture)
} else {
//I think this is the problem:
print("no image found in pointer to users")
// self.picturesArray.append(UIImage(named: "logo"))
let imageData:NSData = UIImagePNGRepresentation(UIImage(named: "logo")!)!
self.picturesArray.append(PFFile(data: imageData))
}
和
//this fixes the crash related to different number of rows and images
if indexPath.row < picturesArray.count {
self.picturesArray[indexPath.row].getDataInBackgroundWithBlock { (imageData: NSData?, error:NSError?) -> Void in
if error == nil {
let image = UIImage(data: imageData!)
cell.senderProfileImage?.image = image
}
}
} else {
// cell.senderProfileImage?.image = UIImage(named: "logo")
print("no foto!")
}
您的应用程序正在崩溃,因为您的 table 视图单元格多于 picturesArray
中的图片
在使用 picturesArray[x]
之前检查是否 indexPath.row < picturesArray.count
if indexPath.row < picturesArray.count {
self.picturesArray[indexPath.row].getDataInBackgroundWithBlock { (imageData: NSData?, error:NSError?) -> Void in
if error == nil {
let image = UIImage(data: imageData!)
cell.senderProfileImage?.image = image
}
}
} else {
cell.senderProfileImage?.image = UIImage(named: "logo")
}
编辑:
如果您想将带有徽标图像的 PFFile 附加到 picturesArray 中,您可以执行以下操作
let imageData:NSData = UIImagePNGRepresentation(UIImage(named: "imagename")!)!
self.picturesArray.append(PFFile(data: imageData))
而不是
self.picturesArray.append(UIImage(named: "logo"))
解释:
此处 self.picturesArray.append(UIImage(named: "logo"))
您试图将 UIImage
对象添加到仅接受 PFFile
对象的数组,正如您在此处声明的那样:var picturesArray : [PFFile] = []
您需要实例化一个新的 PFFile
并向其添加一个 UIImage
,但是 PFFile
初始化器只接受 NSData
进行存储。
因此,要将 UIImage
转换为 NSData
,您可以使用 UIImagePNGRepresentation
,然后使用图像数据实例化 PFFile
。
从 Parse 检索图像并将它们显示在 tableView 上,如果我向下滚动 tableView,应用程序崩溃并给我 "fatal error: Array index out of range"
行数由 "messagesArray"
中的消息数给出我认为问题是在查询中,如果我没有在指针中找到图像,我会说 "append to the PFFile
array this standard UIImage
of mine called "logo" " 所以当我向下滚动时,imagesArray 和 messagesArray 的计数不匹配.
如何将 UIImages 添加到我的 PFFile 数组,以便在查询 PFFIle 图像失败时,可以通过附加 UIImage 来替换它?
有些人告诉我对 dispatch_async(dispatch_get_main_queue()) {}
但主查询本身就是这样调用的。
我有这个数组:
var picturesArray : [PFFile] = []
在 cellForRowAtIndexPath
我有:
self.picturesArray[indexPath.row].getDataInBackgroundWithBlock { (imageData: NSData?, error:NSError?) -> Void in
if error == nil {
let image = UIImage(data: imageData!)
cell.senderProfileImage?.image = image
} else {
print("plan B")
cell.senderProfileImage?.image = UIImage(named: "logo")
}
}
在我的查询中,我可以通过查询带有指向 _Users
的指针的 "sender" 列来检索发件人的姓名。我有:
if let theName = singleObject.objectForKey("sender")?.objectForKey("first_name") as? String {
// this retrieves names from pointer "sender" in "Messages"
self.sendersArray.append(theName) //populate the array with names
} else {
if let messageSender = singleObject["senderNickname"] as? String {
self.sendersArray.append(messageSender)
}
}
if let profilePicture = singleObject.objectForKey("sender")?.objectForKey("profile_picture") as? PFFile {
self.picturesArray.append(profilePicture)
} else {
//I think this is the problem:
print("no image found in pointer to users")
self.picturesArray.append(UIImage(named: "logo"))
}
解决方案:
目前,还需要修复
//very new, it's ok
if let theName = singleObject.objectForKey("sender")?.objectForKey("first_name") as? String {
// this retrieves names from pointer "sender" in "Messages"
self.sendersArray.append(theName) //populate the array with names
} else {
if let messageSender = singleObject["senderNickname"] as? String {
self.sendersArray.append(messageSender)
}
}
//very new : this fix fatal error: Array index out of range
if let profilePicture = singleObject.objectForKey("sender")?.objectForKey("profile_picture") as? PFFile {
self.picturesArray.append(profilePicture)
} else {
//I think this is the problem:
print("no image found in pointer to users")
// self.picturesArray.append(UIImage(named: "logo"))
let imageData:NSData = UIImagePNGRepresentation(UIImage(named: "logo")!)!
self.picturesArray.append(PFFile(data: imageData))
}
和
//this fixes the crash related to different number of rows and images
if indexPath.row < picturesArray.count {
self.picturesArray[indexPath.row].getDataInBackgroundWithBlock { (imageData: NSData?, error:NSError?) -> Void in
if error == nil {
let image = UIImage(data: imageData!)
cell.senderProfileImage?.image = image
}
}
} else {
// cell.senderProfileImage?.image = UIImage(named: "logo")
print("no foto!")
}
您的应用程序正在崩溃,因为您的 table 视图单元格多于 picturesArray
中的图片在使用 picturesArray[x]
之前检查是否 indexPath.row < picturesArray.countif indexPath.row < picturesArray.count {
self.picturesArray[indexPath.row].getDataInBackgroundWithBlock { (imageData: NSData?, error:NSError?) -> Void in
if error == nil {
let image = UIImage(data: imageData!)
cell.senderProfileImage?.image = image
}
}
} else {
cell.senderProfileImage?.image = UIImage(named: "logo")
}
编辑:
如果您想将带有徽标图像的 PFFile 附加到 picturesArray 中,您可以执行以下操作
let imageData:NSData = UIImagePNGRepresentation(UIImage(named: "imagename")!)!
self.picturesArray.append(PFFile(data: imageData))
而不是
self.picturesArray.append(UIImage(named: "logo"))
解释:
此处 self.picturesArray.append(UIImage(named: "logo"))
您试图将 UIImage
对象添加到仅接受 PFFile
对象的数组,正如您在此处声明的那样:var picturesArray : [PFFile] = []
您需要实例化一个新的 PFFile
并向其添加一个 UIImage
,但是 PFFile
初始化器只接受 NSData
进行存储。
因此,要将 UIImage
转换为 NSData
,您可以使用 UIImagePNGRepresentation
,然后使用图像数据实例化 PFFile
。