iOS:不调用connectionDidFinishLoading

时间:2018-03-01 21:37:29

标签: ios objective-c singleton appdelegate nsmutableurlrequest

我想从位于MainViewController.m课程中的DataManagement.m调用一个webService。我所做的是创建一个单例并使用以下行启动它:

[[DataManagement sharedManager] callWebService:url withBytes:bytes];

它运作正常。在这种情况下调用connectionDidFinishLoading

但是如果我想用另一个Reachability.m类检查Internet(回调块将错误返回为nil。那么这意味着存在Internet连接)。当我然后启动相同的代码时,永远不会调用connectionDidFinishLoading方法。我是否必须使用代理人或其他人?

DataManagement.m

+ (instancetype) sharedManager
{
    static DataManagement *sharedManager = nil;

    if (sharedManager == nil)
    {
        sharedManager = [[self alloc] init];
    }
    return sharedManager;
}

- (void)callWebService:(NSString *)url withBytes:(NSString *) bytes
{
    NSMutableURLRequest* request = [[NSMutableURLRequest alloc] init];
    NSString *url_string = [bytes stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
    [request setURL:[NSURL URLWithString:[url stringByAppendingString: url_string]]];
    [request setCachePolicy:NSURLRequestReloadIgnoringLocalCacheData];
    [request setTimeoutInterval:timeOut];
    [NSURLConnection connectionWithRequest:request delegate:self];
}

-(void)connectionDidFinishLoading:(NSURLConnection *)connection
{
 ...
}

MainViewController.m

不起作用:

-(void)viewDidLoad
{
    ...
    [Reachability checkInternetConnectivityWithUrl: url_server WithSuccessCompletion:^(NSError *error) {
        if (error == nil)
        {
            [[DataManagement sharedManager] callWebService:url withBytes:bytes];
        }
        else
        {
            NSLog(@"No internet connection");
        }
    }];
    ...
}

作品:

-(void)viewDidLoad
{
    ...
    [[DataManagement sharedManager] callWebService:url withBytes:bytes];
...
}

1 个答案:

答案 0 :(得分:0)

您的使用仅用于检查互联网连接,但是已连接或未使用此功能进行检查。它会正常工作。

- (BOOL)connected
  {
    Reachability *reachability = [Reachability      
                     reachabilityForInternetConnection];
    NetworkStatus networkStatus = [reachability 
                       currentReachabilityStatus];
    return networkStatus != NotReachable;
  }



-(void)viewDidLoad
    {
      ...
     if ([self connected])
         {
                [[DataManagement sharedManager] callWebService:url 
       withBytes:bytes];
         }
         else
         {
            NSLog(@"No internet connection");
         }
    }

 }