递归函数得到 "Variable is not assignable (missing __block type specifier) error"
recursive function get "Variable is not assignable (missing __block type specifier) error"
我想在队列中发送 AFNetworking
个请求。为此,我创建了一个如下的递归函数:
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
NSLog(@"Start ...");
[self sentTest:0];
}
- (void) sentTest:(int)i{
if(i >= 10)
{
NSLog(@"Finished");
return;
}
NSLog(@"sending message %d ...", i);
NSMutableDictionary *params = [@{@"param1": @"value1",
@"param2": @"value2",
} mutableCopy];
NSString *webServiceUrl = @"MY_REST_SERVICE_URL";
AFHTTPSessionManager *manager = [[AFHTTPSessionManager alloc] init];
manager.responseSerializer = [AFJSONResponseSerializer serializer];
[manager POST:webServiceUrl parameters:params success:^(NSURLSessionDataTask *task, id responseObject) {
NSLog(@"message sent successful %d", i);
// Now call the method again
[self sentTest:i++];
return;
} failure:^(NSURLSessionDataTask *task, NSError *error) {
NSLog(@"message sent failure %d", i);
return;
}];
}
我收到这个错误:
Variable is not assignable (missing __block type specifier) error"
我知道我需要定义块类型,但我不知道如何在这个递归函数中使用它。
我有些担心 manager
在方法结束时被销毁,但它被块保留。
我不确定您的代码是否有效,但实际的错误消息与更新块中的 i
有关(并且需要应用 __block
属性),但是有根本没有理由增加 i
,只需将 i + 1
传递给递归方法:
[self sentTest:i + 1];
(您的代码中缺少一个分号,所以我不确定那是不是真正的代码)。
我想在队列中发送 AFNetworking
个请求。为此,我创建了一个如下的递归函数:
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
NSLog(@"Start ...");
[self sentTest:0];
}
- (void) sentTest:(int)i{
if(i >= 10)
{
NSLog(@"Finished");
return;
}
NSLog(@"sending message %d ...", i);
NSMutableDictionary *params = [@{@"param1": @"value1",
@"param2": @"value2",
} mutableCopy];
NSString *webServiceUrl = @"MY_REST_SERVICE_URL";
AFHTTPSessionManager *manager = [[AFHTTPSessionManager alloc] init];
manager.responseSerializer = [AFJSONResponseSerializer serializer];
[manager POST:webServiceUrl parameters:params success:^(NSURLSessionDataTask *task, id responseObject) {
NSLog(@"message sent successful %d", i);
// Now call the method again
[self sentTest:i++];
return;
} failure:^(NSURLSessionDataTask *task, NSError *error) {
NSLog(@"message sent failure %d", i);
return;
}];
}
我收到这个错误:
Variable is not assignable (missing __block type specifier) error"
我知道我需要定义块类型,但我不知道如何在这个递归函数中使用它。
我有些担心 manager
在方法结束时被销毁,但它被块保留。
我不确定您的代码是否有效,但实际的错误消息与更新块中的 i
有关(并且需要应用 __block
属性),但是有根本没有理由增加 i
,只需将 i + 1
传递给递归方法:
[self sentTest:i + 1];
(您的代码中缺少一个分号,所以我不确定那是不是真正的代码)。