将参数传递到块中
Passing a parameter into a block
我正在尝试将参数传递到块中,但我所做的每个配置都会引发错误。我尝试传入的参数是 Venue 类型,如下所示。
这是我在 header
中可能不正确的声明
-(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*
类型变量的方式声明它
格式如下:
- (void)someMethodThatTakesABlock:(returnType (^)(parameterTypes))blockName;
这个例子来自http://goshdarnblocksyntax.com/
但是你不是想设置块的"returnType",我认为你只是想传递一个"Venue*"到方法中,然后当你的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);
}];
我正在尝试将参数传递到块中,但我所做的每个配置都会引发错误。我尝试传入的参数是 Venue 类型,如下所示。
这是我在 header
中可能不正确的声明-(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*
类型变量的方式声明它格式如下:
- (void)someMethodThatTakesABlock:(returnType (^)(parameterTypes))blockName;
这个例子来自http://goshdarnblocksyntax.com/
但是你不是想设置块的"returnType",我认为你只是想传递一个"Venue*"到方法中,然后当你的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);
}];