![](/img/trans.png)
[英]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?
[英]How to query an PFFile By Creation Date
我正在使用此代碼從解析數據中檢索圖像...
if let userPicture = object.valueForKey("Image") as? PFFile {
userPicture.getDataInBackgroundWithBlock({ (imageData: NSData?, error: NSError?) -> Void in
if (error == nil) {
let image = UIImage(data:imageData!)
self.ImageArray.insert(image!, atIndex: 0)
}
else {
self.alert("Error: \(error!) \(error!.userInfo!)", Message: "Make sure you have a secure internet connection")
}
dispatch_async(dispatch_get_main_queue()) {
println("Finished Pictures")
}
})
}
我正在使用此代碼從Parse中檢索String:
var stuffarray = [String]()
var query = PFQuery(className:"ClassName")
query.findObjectsInBackgroundWithBlock {
(objects: [AnyObject]?, error: NSError?) -> Void in
if error == nil {
// The find succeeded.
println("Successfully retrieved \(objects!.count) scores.")
// Do something with the found objects
if let objects = objects as? [PFObject] {
for object in objects {
stuffarray.append(object.valueForKey("Column")! as! String)
}
} else {
// Log details of the failure
println("Error: \(error!) \(error!.userInfo!)")
}
dispatch_async(dispatch_get_main_queue()) {
self.alert("\(stuffarray)", Message: "")
}
}
}
我知道如何通過添加以下代碼來查詢第二個示例:
query.orderByAscending("createdAt")
我的問題是,如何查詢第二個示例中的第一個示例(圖像)? 我嘗試使用以下代碼,但出現錯誤:
userPicture.orderByAscending("createdAt")
我嘗試使用以下代碼,已正確返回文本,但圖像仍按隨機順序返回...
var query = PFQuery(className:"Featured")
query.orderByDescending("createdAt")
query.findObjectsInBackgroundWithBlock {
(objects: [AnyObject]?, error: NSError?) -> Void in
if error == nil {
// The find succeeded.
println("Successfully retrieved \(objects!.count) Items.")
// Do something with the found objects
if let objects = objects as? [PFObject] {
for object in objects {
self.NameArray.insert(object.valueForKey("Text")! as! String, atIndex: 0)
self.ItemNameArray.insert(object.valueForKey("ItemName")! as! String, atIndex: 0)
let userImageFile = object["Image"] as! PFFile
userImageFile.getDataInBackgroundWithBlock {
(imageData: NSData?, error: NSError?) -> Void in
if error == nil {
if let imageData = imageData {
let image = UIImage(data:imageData)
self.imageArray.insert(image!, atIndex: 0)
}
}
dispatch_async(dispatch_get_main_queue()) {
self.loading.hidden = true
self.collectionView.reloadData()
}
}
}
}
} else {
// Log details of the failure
println("Error: \(error!) \(error!.userInfo!)")
}
}
第一個查詢出現錯誤的原因是因為您沒有獲取對象數組。 您正在獲取無法“排序”的單個PFFile的數據內容。 如果希望查詢PFFile列表並在創建日期之前對其進行排序,則需要查詢圖像附加到的Class對象,然后為每個對象獲取圖像數據(最好是異步獲取)。 有關示例,請參見下面的代碼片段:
PFQuery *query = [PFQuery queryWithClassName:@"Photo"];
[query orderByDescending:@"createdAt"];
[query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
if (!error) {
for (PFObject *object in objects) {
[objectIDArray addObject:object.objectId];
NSString *postedBy = object[@"postedBy"];
[postedByFeedArray addObject:postedBy];
NSString *caption = object[@"caption"];
[captionFeedArray addObject:caption];
PFFile *file = object[@"photoFile"];
[file getDataInBackgroundWithBlock:^(NSData *data, NSError *error) {
if (!error) {
[photoFeedArray addObject:data];
}
dispatch_async(dispatch_get_main_queue(), ^{
[_activityIndicator stopAnimating];
[_tableView reloadData];
});
}];
}
} else {
NSLog(@"ERROR: %@", error);
}
}];
如果您需要幫助將其轉換為Swift,請告訴我。
作為回應,“我將其更改為'append',並且數組圖像仍然是隨機順序。其他兩個字符串項可以正常工作。為什么只是圖像。請盡快給出答案。”:
圖像仍然是隨機順序的原因是因為它們是從服務器異步下載的。 PFFile getDataInBackgroundWithBlock
在后台運行,並且較小的文件可能比較早啟動的較大的文件完成得更快。
在實際准備好在UICollectionView或UITableView中顯示圖像之前,不應該下載圖像。 渲染單元格時,您將僅然后再調用PFFile getDataInBackgroundWithBlock
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.