ios - 在没有互联网连接的情况下上传图片时如何防止应用崩溃

标签 ios objective-c

我有 objective-c 代码:

NSString * url = [NSString stringWithFormat:@"http://tragicclothing.co.uk/Retort/imageupload.php"];
    NSMutableURLRequest *request=[NSMutableURLRequest requestWithURL:[NSURL URLWithString:url]];
    [request setHTTPMethod:@"POST"];
    NSString *boundary = @"---------------------------14737809831466499882746641449";
    NSMutableData *body = [[NSMutableData alloc]init];
    [body appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]];
    [body appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"image\"; filename=\"image.jpg\"\r\n"] dataUsingEncoding:NSUTF8StringEncoding]];
    [body appendData:[@"Content-Type: audio/basic\r\n\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
    [body appendData:_imageDataToSend];
    [body appendData:[[NSString stringWithFormat:@"\r\n--%@--\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]];
    [request setHTTPBody:body];
    NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@",boundary];
    [request addValue:contentType forHTTPHeaderField: @"Content-Type"];

    //Send the Request
    NSData* returnData = [NSURLConnection sendSynchronousRequest: request
                                               returningResponse: nil error: nil];
    //serialize to JSON
    NSDictionary *result = [NSJSONSerialization JSONObjectWithData:returnData options:NSJSONReadingMutableContainers error:nil];

    //parsing JSON
    bool success = [result[@"success"] boolValue];
    if(success){ 
        NSLog(@"Success=%@",result[@"msg"]); 
    }else{ 
        NSLog(@"Fail=%@",result[@"msg"]);
    }

当连接到互联网时,它可以正常工作,但如果不是,我会收到错误消息:

由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“数据参数为nil”

最佳答案

您必须在执行网络请求之前检查连接性。

一旦有了downloaded并导入了Reachbility.mReachbility.h文件

创建一个辅助函数:

-(BOOL)IsConnected{
  Reachability *reachability = [Reachability reachabilityForInternetConnection];
  NetworkStatus networkStatus = [reachability currentReachabilityStatus];

  return !(networkStatus == NotReachable);    
}

然后用
if([self IsConnected]){
 //connected!
 //upload your image
}
else{
  //not connected to internet!
}

非常重要

如果您的项目没有使用arc
  • 转到目标>
  • 构建阶段>
  • 双击可达性文件
  • 添加-fno-objc-arc
  • 关于ios - 在没有互联网连接的情况下上传图片时如何防止应用崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23280765/

    相关文章:

    ios - 如何以编程方式创建 UINavigationBar

    ios - 一直可靠工作的时间戳函数只是导致了 EXC_BAD_INSTRUCTION

    ios - 如何在 UIAlertController 中使用 UITextView

    ios - 使用 SpriteKit 和内置物理引擎移动和跳跃 Sprite

    c++ - 高效快捷地访问 CoreFoundation 容器

    iphone - 两个 NSDate 之间的区别

    ios - 如何与主线程 swift 文件通信以访问主线程变量

    ios - 没有看到 20 个 I/O 周期;下载音频文件时放弃在 Swift 中发生

    ios - iOS 中的随机颜色

    ios - 在 iOS 7 的启动画面中显示状态栏