2015-12-23 2 views
0

Я пытаюсь передать параметр в блок, но каждая конфигурация, которую я делаю, вызывает ошибки. Параметр im, пытающийся пройти, имеет тип Venue, как вы можете видеть ниже.Передача параметра в блок

Вот мой, возможно неправильное заявление в заголовке

-(void)update:(Venue* (^)(NSArray *myScenes, NSError *error))block; 

Вот моя реализация, которую я знаю, это неправильно, потому что я не могу ссылаться на переданный в переменной, но его единственное не бросали ошибку

-(void)update:(Venue* (^)(NSArray *myScenes, NSError *error))block{ 

//download scenes 
PFQuery *query = [PFQuery queryWithClassName:@"Scenes"]; 
[query orderByDescending:@"createdAt"]; 
[query whereKey:@"venueId" equalTo:venue.objectId]; 
[query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) { 
    if (error) { 
     NSLog(@"Error: %@ %@", error, [error userInfo]); 
    } 
    else { 
     // We found messages! 
     scenes = objects; 
     //[PFObject pinAllInBackground:objects]; 

     NSLog(@"Retrieved %lu messages", (unsigned long)[scenes count]); 
     NSLog(@"Venues = %@", scenes); 



    } 
}]; 


} 

и вот как им называть его

[_venues[0] update:^Venue *(NSArray *myScenes, NSError *error) { 
    if (error) { 
     NSLog(@"Error: %@ %@", error, [error userInfo]); 
    } 
    else { 

     NSLog(@"myObjects are: %@", myScenes); 
     _venues[0].scenes = myScenes; 


    } 
}]; 

неправильно агу в. В основном я хочу знать, как объявить это таким образом, что позволяет мне передать переменную типа Venue *

+0

http://goshdarnblocksyntax.com – matt

ответ

1

Формат выглядит следующим образом:

- (void)someMethodThatTakesABlock:(returnType (^)(parameterTypes))blockName; 

Этот пример из http://goshdarnblocksyntax.com/

Но вы не пытаетесь установить «returnType» в блоке, я думаю, что вы просто хотите передать «Место проведения» в этот метод, а затем вызвать блок, когда ваш PFQuery обнаружит его объекты?

В этом случае, вам нужно сделать что-то больше, как это:

- (void)updateVenue:(Venue*)venue completion:(void(^)(NSArray *myScenes, NSError *error))completion{ 

, а затем внутри метода необходимо выполнить следующие действия:

[query findObjectsInBackgroundWithBlock:^(NSArray *scenes, NSError *error) { 
if (error) { 
    NSLog(@"Error: %@ %@", error, [error userInfo]); 
} 
else { 
    // We found messages! 
    //[PFObject pinAllInBackground:scenes]; 

    NSLog(@"Retrieved %lu messages", (unsigned long)[scenes count]); 
    NSLog(@"Venues = %@", scenes); 
} 
if (completion) completion(scenes, error); 
}];