我正在使用此代码从Parse数据中检索图像...
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!)")
}
}
答案 0 :(得分:0)
第一个查询出错的原因是您没有获取对象数组。您正在获取单个PFFile的数据内容,这些内容不能被"命令"。如果您希望查询PFFiles列表并按创建日期对它们进行排序,则需要查询图像所附加的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,请与我们联系。
答案 1 :(得分:0)
响应,"我将其更改为'追加',并且数组图像仍然是随机顺序。其他2个字符串项完美运行。为什么只是图像。请迅速给出答案。":
您的图片仍处于随机顺序的原因是因为它们是从服务器异步下载的。 PFFile getDataInBackgroundWithBlock
在后台运行,较小的文件可能比可能较早开始的较大文件完成得快。
在您准备好在UICollectionView或UITableView中显示图像之前,不应下载图像。渲染单元格时,您将调用PFFile getDataInBackgroundWithBlock
,然后才会调用。