2015-08-16 4 views
1

Я получаю геолокации для аннотаций на карте и хотел бы показать изображение, связанное с пользователем, из той же строки в пользовательском представлении.Извлечь изображения из Parse вдоль его геолокации

Я пытался экономить PFFiles в словаре наряду с ObjectIds, потому что я устанавливаю заголовок каждого примечания по своему расположению в ObjectID, но это дает мне - [PFObject ObjectId]: непризнанные селектор направил к экземпляру.

Это то, что я сейчас делаю.

PFQuery *query = [PFQuery queryWithClassName:@"photoObject"]; 

    [query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error){ 

     for (id object in objects) { 


      [self.annotationArray addObject:object[@"location"]]; 
      NSLog(@"Annotation's coordinate : %@", self.annotationArray); 

      UIImage *image = [UIImage imageWithData:object[@"photo"]]; 

      [self.imageFileDict setObject:object[@"photo"] forKey:[object objectID]]; 
      NSLog(@"imageFileDict : %@", self.imageFileDict); 

      self.geoPoint = object[@"location"]; 

      CLLocationCoordinate2D locCoord = CLLocationCoordinate2DMake(self.geoPoint.latitude, self.geoPoint.longitude); 
      CustomPin *pin = [[CustomPin alloc] initWithTitle:[object objectId] location:locCoord image:image]; 
      [self.mainMap addAnnotation:pin]; 

      NSLog(@"Adding annotation"); 


     } 

    }]; 

А потом

- (void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView *)view { 

CustomPin *pin = (CustomPin *)[view annotation]; 
NSLog(@"selected pin's objectID : %@",pin.title); 

UIImageView *callOutview = [[UIImageView alloc]initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.width)]; 
[self.view addSubview:callOutview]; 
callOutview.backgroundColor = [UIColor yellowColor]; 

callOutview.image = pin.image;} 

Редактировать

Я понял, что я должен был сделать это для того, чтобы заставить его работать с PFFiles

PFFile *imageFile = object[@"photo"]; 
      [imageFile getDataInBackgroundWithBlock:^(NSData *imageData, NSError *error) { 
       if (!error) { 
        self.callOutImage = [UIImage imageWithData:imageData]; 


       }}]; 

Но до сих пор не за работой.

+0

попробуйте это сначала: измените это для (id объекта в объектах) {для этого для объекта PFObject * в объектах) {затем показать результат – Loxx

+0

Нет, не работает. – durazno

+0

Да, я пробовал все варианты, и вы правы, он еще не работает – Loxx

ответ

1

решаемые это ..

PFFile *imageFile = object[@"photo"]; 
      [imageFile getDataInBackgroundWithBlock:^(NSData *imageData, NSError *error) { 
       if (!error) { 

        [self.annotationArray addObject:object[@"location"]]; 
        NSLog(@"Annotation's coordinate : %@", self.annotationArray); 


        self.callOutImage = [UIImage imageWithData:imageData]; 

        self.geoPoint = object[@"location"]; 

        CLLocationCoordinate2D locCoord = CLLocationCoordinate2DMake(self.geoPoint.latitude, self.geoPoint.longitude); 
        CustomPin *pin = [[CustomPin alloc] initWithTitle:[object objectId] location:locCoord image:self.callOutImage]; 
        [self.mainMap addAnnotation:pin]; 

       }}]; 

я должен был установить изображения внутри getDataInBackgroundWithBlock, так как я получаю PFFiles для UIImages в фоновом режиме в противном случае изображения не получить никаких данных.

+0

отличная работа, thats great – Loxx