Ios 从Parse.com获取特定文件
我对如何从所选行获取特定列感到非常困惑 我的第一个视图是UICollectionView,它从一个类中查找所有对象。选定单元格后,您将进入包含另一个UICollectionView的DetailView,该UICollectionView将显示选定行中的文件 如何设置查询以便第二个CollectionView显示特定行的特定列 请看图片。我需要显示图像1,图像2,图像3。。。等等,在第二个CollectionView中 编辑的代码: VestimentaViewController.mIos 从Parse.com获取特定文件,ios,file,uicollectionview,parse-platform,Ios,File,Uicollectionview,Parse Platform,我对如何从所选行获取特定列感到非常困惑 我的第一个视图是UICollectionView,它从一个类中查找所有对象。选定单元格后,您将进入包含另一个UICollectionView的DetailView,该UICollectionView将显示选定行中的文件 如何设置查询以便第二个CollectionView显示特定行的特定列 请看图片。我需要显示图像1,图像2,图像3。。。等等,在第二个CollectionView中 编辑的代码: VestimentaViewController.m #im
#import "VestimentaViewController.h"
#import "VestimentaDetailViewController.h"
@interface VestimentaViewController ()
@end
@implementation VestimentaViewController
@synthesize imagesCollection, activityIndicator;
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// Custom initialization
}
return self;
}
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view.
[self queryParseMethod];
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
- (void)queryParseMethod {
[activityIndicator startAnimating];
PFQuery *query = [PFQuery queryWithClassName:@"VestimentaView"];
[query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
if (!error) {
vestimentaFilesArray = [[NSArray alloc] initWithArray:objects];
[imagesCollection reloadData];
}
}];
}
#pragma mark Collection data source
-(NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView {
return 1;
}
-(NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection: (NSInteger)section {
return [vestimentaFilesArray count];
}
-(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
static NSString *cellIdentifier = @"Cell";
VestimentaCell *cell = (VestimentaCell *) [collectionView dequeueReusableCellWithReuseIdentifier:cellIdentifier forIndexPath:indexPath];
PFObject *infoObject = [vestimentaFilesArray objectAtIndex:indexPath.row];
cell.storeName.text = [infoObject objectForKey:@"cellTitle"];
cell.storeDescription.text = [infoObject objectForKey:@"descriptionTitle"];
[activityIndicator stopAnimating];
}
return cell;
}
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([segue.identifier isEqualToString:@"vestimentaDetail"]){
NSIndexPath *indexPath = [self.imagesCollection indexPathForCell:sender];
PFObject *object = [vestimentaFilesArray objectAtIndex:indexPath.item];
VestimentaDetailViewController *detailViewController = segue.destinationViewController;
detailViewController.vestimenta = object;
}
}
@end
#import "VestimentaDetailViewController.h"
#import "VestimentaViewController.h"
@interface VestimentaDetailViewController ()
@end
@implementation VestimentaDetailViewController
@synthesize imagesCollection;
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// Custom initialization
}
return self;
}
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view.
[self queryParseMethod];
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
#pragma mark Collection data source
-(NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView {
return 1;
}
-(NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section {
return [filesArray count];
}
-(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
static NSString *cellIdentifier = @"Cell";
VestimentaDetailCell *cell = (VestimentaDetailCell *) [collectionView dequeueReusableCellWithReuseIdentifier:cellIdentifier forIndexPath:indexPath];
PFFile *imageFile = [self.vestimenta objectForKey:@"image_1"];
[imageFile getDataInBackgroundWithBlock:^(NSData *data, NSError *error) {
if (!error) {
cell.imageFile.image = [UIImage imageWithData:data];
}
}];
return cell;
}
@end
痕迹导航控制器.h
#import <UIKit/UIKit.h>
#import "VestimentaCell.h"
#import <Parse/Parse.h>
@interface VestimentaViewController : UIViewController {
NSArray *vestimentaFilesArray;
NSMutableArray *tiendasArray;
}
@property (weak, nonatomic) IBOutlet UICollectionView *imagesCollection;
@property (weak, nonatomic) IBOutlet UIActivityIndicatorView *activityIndicator;
@end
#import <UIKit/UIKit.h>
#import "VestimentaDetailCell.h"
#import <Parse/Parse.h>
@interface VestimentaDetailViewController : UIViewController {
NSArray *filesArray;
}
@property (weak, nonatomic) PFObject *vestimenta;
@property (weak, nonatomic) IBOutlet UICollectionView *imagesCollection;
@end
restrimentadetailviewcontroller.h
#import <UIKit/UIKit.h>
#import "VestimentaCell.h"
#import <Parse/Parse.h>
@interface VestimentaViewController : UIViewController {
NSArray *vestimentaFilesArray;
NSMutableArray *tiendasArray;
}
@property (weak, nonatomic) IBOutlet UICollectionView *imagesCollection;
@property (weak, nonatomic) IBOutlet UIActivityIndicatorView *activityIndicator;
@end
#import <UIKit/UIKit.h>
#import "VestimentaDetailCell.h"
#import <Parse/Parse.h>
@interface VestimentaDetailViewController : UIViewController {
NSArray *filesArray;
}
@property (weak, nonatomic) PFObject *vestimenta;
@property (weak, nonatomic) IBOutlet UICollectionView *imagesCollection;
@end
#导入
#导入“restrimentadetailcell.h”
#进口
@界面痕迹TailViewController:UIViewController{
NSArray*文件数组;
}
@性质(弱、非原子)PFObject*痕迹A;
@属性(弱、非原子)IBUICollectionView*imagesCollection;
@结束
这将显示单击的每个单元格的图像,但仅显示图像\u 1。。。如何构造一个数组或字典来显示任何单击的单元格(在第二个或详细视图控制器中)的image_1、image_2、image_3?您不需要从解析中获取特定列。您总是将整行作为PFObject获取,然后从该对象获取特定属性 在集合视图中,您已经显示了单元格标题。这意味着您已经拥有包含图像的PFObject。您应该使用PFImageView来显示图像。文件尚未下载,因此您需要将PFImageView文件设置为image_1文件等,如下所示:
PFImageView *firstImage = [[PFImageView alloc] init];
firstImage.file = theObjectFromPreviousCollectionView[@"image_1"];
[firstImage loadInBackground];
“ObjectFromPreviousCollectionView”是与您单击的单元格对应的对象。在prepareForSegue方法中,您可以将此对象传递给详细视图。您可以编写一个函数,该函数在选择行时调用,该行将触发查询并在secondViewController中的imageview(PFImageView)上显示,如
-(void)settingAllImageView
{
PFQuery *query = [PFQuery queryWithClassName:@"ImageClassName"];
/*Could put up condition if require specific row*/
[query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error)
{
if (!error && objects.count != 0)
{
NSLog(@"Successfully retrieved: %@", objects);
for(int *i=0;i<=[objects count];i--)
{
NSDictionary *dict = [objects objectAtIndex:i];
PFFile *file = [object objectForKey:@"image"];
imageView.file = file;
/*imageView is PFImageView*/
/*For more than 1 images in a row you could store PFFiles in a array den use that array to load up imageView*/
}
// Now tell PFImageView to download the file asynchronously
[imageView loadInBackground];
}
}];
}
-(无效)设置所有图像视图
{
PFQuery*query=[PFQuery queryWithClassName:@“ImageClassName”];
/*如果需要特定行,可以设置条件*/
[查询findObjectsInBackgroundWithBlock:^(NSArray*对象,NSError*错误)
{
如果(!error&&objects.count!=0)
{
NSLog(@“成功检索:%@”,对象);
对于(int*i=0;我不太明白你的问题。你是在问如何构造一个将返回突出显示行的查询?还是在问如何下载和显示突出显示行中的图像?如果我的问题不清楚,很抱歉。是的,我问的是如何构造一个突出显示行的查询。实际上,我已经知道了围着它转,我想我需要的是一个文件数组(列-image\u 1、image\u 2、image\u 3..等等)在第二个视图中调用并使用可重用的ImageView。清楚吗?我确实这样做了,但存在内存问题。我每行大约有10个图像,如果我加载超过5个PFImageView,则会因为内存问题而崩溃(每个图像最多1 MB)。因此,我必须找到一种方法来创建可重用的PFImageView,这就是我考虑使用CollectionView的原因。您知道我必须如何设置DetailView(第二个视图)的CollectionView吗?我想这会有用的。不过我确实需要一只手。我如何构造一个从parse.com检索它的数组?你可以使用array1来存储image1,array2来存储image2等等…然后你可以将这些数组传递给second view controller并根据需要使用。你也可以通过创建一个图像字典1,2,3,…来将所有图像存储在数组中,。。。然后使用它!我想我需要创建一个字典,但我仍然很困惑。我将在这个问题中编辑我的代码,希望它能有所帮助。@adriennemhenry:您必须显式地为其他对象键调用getdatainbackground方法,即image_2和image_3创建一个函数,如下所示,并在CellForItemIndexPath之前调用它:-(void)FilterImage{/*使imageArray全局化,以便您可以在cellForItemAtIndexPath*/PFFile*imageFile1=[self.object objectForKey:@“image_1”];[imageFile1 GetDataInBackgroundithBlock:^(NSData*数据,NSError*错误){if(!error){[imageArray addObject:data];}}};PFFile*imageFile2=[self.object objectForKey:@“image_2”];[imageFile2 getDataInBackgroundWithBlock:^(NSData*数据,NSError*错误){}与imgae_3相同..}