Ios 从Parse.com获取特定文件

Ios 从Parse.com获取特定文件,ios,file,uicollectionview,parse-platform,Ios,File,Uicollectionview,Parse Platform,我对如何从所选行获取特定列感到非常困惑 我的第一个视图是UICollectionView,它从一个类中查找所有对象。选定单元格后,您将进入包含另一个UICollectionView的DetailView,该UICollectionView将显示选定行中的文件 如何设置查询以便第二个CollectionView显示特定行的特定列 请看图片。我需要显示图像1,图像2,图像3。。。等等,在第二个CollectionView中 编辑的代码: VestimentaViewController.m #im

我对如何从所选行获取特定列感到非常困惑

我的第一个视图是UICollectionView,它从一个类中查找所有对象。选定单元格后,您将进入包含另一个UICollectionView的DetailView,该UICollectionView将显示选定行中的文件

如何设置查询以便第二个CollectionView显示特定行的特定列

请看图片。我需要显示图像1,图像2,图像3。。。等等,在第二个CollectionView中

编辑的代码:

VestimentaViewController.m

#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相同..}