Lỗi tên miền = NSURLErrorDomain Code = -1005 Triệu Kết nối mạng bị mất.


268

Tôi có một ứng dụng hoạt động tốt trên Xcode6-Beta1 và Xcode6-Beta2 với cả iOS7 và iOS8. Nhưng với Xcode6-Beta3, Beta4, Beta5 tôi đang gặp vấn đề về mạng với iOS8 nhưng mọi thứ đều hoạt động tốt trên iOS7. Tôi nhận được lỗi "The network connection was lost.". Lỗi như sau:

Lỗi: Lỗi tên miền = NSURLErrorDomain Code = -1005 "Kết nối mạng bị mất." UserInfo = 0x7ba8e5b0 {NSErrorFailingURLStringKey =, _kCFStreamErrorCodeKey = 57, NSErrorFailingURLKey =, NSLrrFF

Tôi sử dụng AFNetworking 2.x và đoạn mã sau để thực hiện cuộc gọi mạng:

AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
[manager setSecurityPolicy:policy];
manager.requestSerializer = [AFHTTPRequestSerializer serializer];
manager.responseSerializer = [AFHTTPResponseSerializer serializer];

[manager POST:<example-url>
   parameters:<parameteres>
      success:^(AFHTTPRequestOperation *operation, id responseObject) {
          NSLog(@“Success: %@", responseObject);
      } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
          NSLog(@"Error: %@", error);
      }];

Tôi đã thử NSURLSessionnhưng vẫn nhận được lỗi tương tự.


Bất kỳ bản cập nhật ? Nó chỉ xảy ra trên iOS 8 trên Wifi đối với tôi, vẫn cố gắng tìm cách giải quyết.
Dimillian


Bất cứ ai có thể giúp tôi giải quyết vấn đề của tôi, gần như cùng một vấn đề nhưng mã lỗi khác nhau, stackoverflow.com/questions/26972822/ợi
iYoung

1
phải đối mặt với vấn đề tương tự với iOS 10.0.1 và Xcode 8.
Satheeshwaran

1
Tôi đã gặp lỗi này sáng nay và sửa nó ngay bây giờ bằng một giải pháp đơn giản và kỳ lạ. Địa chỉ máy chủ được yêu cầu là sai, không có mã trạng thái 4xx hoặc 5xx được trả về, nó chỉ gặp phải vấn đề này, không chắc chính xác nguyên nhân gốc là gì. Vì vậy, vui lòng xác nhận với các nhà phát triển phụ trợ trong nhóm của bạn hoặc bạn sẽ lãng phí một vài giờ cho nó.
Itachi

Câu trả lời:


414

Khởi động lại trình giả lập đã khắc phục sự cố cho tôi.


3
Điều gì xảy ra nếu vấn đề này là trên thiết bị không phải là sim? Đã thử khởi động lại thiết bị, vẫn lỗi tương tự.
Sean Clark

2
@SeanClark: xem câu trả lời tiếp theo: khởi động lại trình giả lập hoạt động vì HĐH cần bỏ kết nối chết thay vì cố gắng sử dụng lại chúng sau khi chúng bị máy chủ bỏ. Để khắc phục sự cố này, bạn có thể vô hiệu hóa cơ chế Keep-live trên máy chủ cho các máy khách iOS hoặc nếu bạn không có quyền truy cập vào máy chủ, bạn chỉ cần thử lại yêu cầu tương tự khi thất bại (thất bại sẽ xảy ra HĐH bỏ kết nối và một kết nối mới được khởi tạo khi thử lại được gửi).
Arthur

Tôi hiện đang sử dụng Xcode 6.2 và những gì đã giải quyết được khi nhấp vào Trình mô phỏng iOS> Đặt lại Cài đặt và Nội dung. Sau khi hoàn thành, tôi thoát khỏi trình giả lập và xây dựng lại và chạy dự án của mình ... mọi thứ hoạt động hoàn hảo sau đó.
KingPolygon

Nó hoạt động với tôi để thiết lập lại trình giả lập nhưng chỉ 10% thời gian. Tôi vừa có một ISP mới và nó chạy hơi lạ. Điều này xảy ra tất cả các thời gian bây giờ trên giả lập. Có thể là mạng.
noobsmcgoobs 11/215

1
Đặt lại giả lập đã không làm việc cho tôi. Tuy nhiên, bắt đầu Charles làm cho vấn đề biến mất. Xem stackoverflow.com/a/26066764/598057 trong đó gợi ý sử dụng Charles. Rất kỳ lạ nhưng hoạt động ...
Stanislav Pankevich

231

Chúng tôi đã có lỗi chính xác này và hóa ra đó là một vấn đề với việc triển khai HTTP cơ bản của NSURLRequest:

Theo như chúng tôi có thể nói, khi iOS 8/9/10/11 nhận được phản hồi HTTP với Keep-Alivetiêu đề, nó sẽ giữ kết nối này để sử dụng lại sau (nếu cần), nhưng nó giữ cho nó nhiều hơn timeouttham số của Tiêu đề Keep-Alive (dường như luôn giữ kết nối tồn tại trong 30 giây.) Sau đó, khi ứng dụng thứ hai được gửi bởi ứng dụng chưa đầy 30 giây sau, nó sẽ cố gắng sử dụng lại kết nối có thể bị máy chủ đánh rơi (nếu nhiều hơn thực tế Keep-Aliveđã trôi qua).

Dưới đây là các giải pháp chúng tôi đã tìm thấy cho đến nay:

  • Tăng tham số thời gian chờ của máy chủ trên 30 giây. Có vẻ như iOS luôn hoạt động như thể máy chủ sẽ giữ kết nối mở trong 30 giây bất kể giá trị được cung cấp trong tiêu đề Keep-Alive. (Điều này có thể được thực hiện cho Apache bằng cách đặt KeepAliveTimeouttùy chọn.
  • Bạn chỉ có thể vô hiệu hóa cơ chế giữ mạng cho máy khách iOS dựa trên Tác nhân người dùng của ứng dụng của bạn (ví dụ: đối với Apache: BrowserMatch "iOS 8\." nokeepalivetrong tệp mod setenvif.conf)
  • Nếu bạn không có quyền truy cập vào máy chủ, bạn có thể thử gửi yêu cầu của mình bằng một Connection: closetiêu đề: điều này sẽ yêu cầu máy chủ hủy kết nối ngay lập tức và trả lời mà không có bất kỳ tiêu đề nào còn tồn tại. NHƯNG tại thời điểm này, NSURLSession dường như ghi đè Connectiontiêu đề khi các yêu cầu được gửi (chúng tôi đã không kiểm tra rộng rãi giải pháp này vì chúng tôi có thể điều chỉnh cấu hình Apache)

7
Đây là một dự án mẫu mực chứng minh vấn đề này, một báo cáo lỗi cũng đã được gửi cho Apple. cl.ly/Xgkl/keep-alive-fail.zip Khởi động dự án, nhấp vào nút đăng bài đầu tiên (trên cùng trên màn hình), đợi trong 5 giây, nhấp lại vào nó, lỗi.
Dimillian

5
Giữ sống là song phương. Khách hàng sẽ thêm tiêu đề http "Kết nối: Giữ nguyên" theo mặc định, thêm các tham số giữ nguyên trên các yêu cầu của khách hàng có thể giúp ích; ví dụ: "Keep-Alive: max = 1". Nhận xét của Arthur rất hữu ích nhưng cũng chỉ ra hơn 1 vấn đề trong mạng giả lập iOS8. Tôi phải sử dụng https để nhận kết nối vì http không thành công trước khi gửi yêu cầu.
ptc

5
Chào các bạn, tôi đang gặp vấn đề chính xác như vậy trên thiết bị. có cách sửa nào cho nó không? Không có vấn đề gì trên iOS 7 cả.
Andres C

9
Mẹo: bạn có thể sử dụng NSURLErrorNetworkConnectionLosthằng số thay vì mã hóa cứng -1005.
Vincent Tourraine

6
Vấn đề này vẫn còn hiện diện trên iOS 11.2.6.
Makalele

47

Đối với tôi, Resetting content and settingscủa Simulator hoạt động. Để đặt lại trình giả lập, hãy làm theo các bước:

Trình mô phỏng iOS -> Đặt lại Nội dung và Cài đặt -> Nhấn Đặt lại (trên cảnh báo sẽ đến)


29

Thời gian chạy giả lập iOS 8.0 có lỗi, nếu cấu hình mạng của bạn thay đổi trong khi thiết bị mô phỏng được khởi động, các API cấp cao hơn (ví dụ: CFNetwork) trong thời gian chạy mô phỏng sẽ nghĩ rằng nó đã mất kết nối mạng. Hiện tại, cách giải quyết được khuyên là chỉ cần khởi động lại thiết bị mô phỏng khi cấu hình mạng của bạn thay đổi.

Nếu bạn bị ảnh hưởng bởi vấn đề này, vui lòng gửi thêm các radar trùng lặp tại http://ormsreport.apple.com để được tăng mức độ ưu tiên.

Nếu bạn thấy vấn đề này mà không thay đổi cấu hình mạng, thì đó không phải là lỗi đã biết và bạn chắc chắn nên gửi một radar, chỉ ra rằng vấn đề không phải là lỗi đã thay đổi cấu hình mạng đã biết.


7
Tôi có vấn đề này trên một thiết bị quá.
Darren

@darren Vậy thì đó không phải là vấn đề mà tôi đang đề cập đến. Tôi đề nghị bạn nộp một radar.
Jeremy Huddleston Sequoia

4
vui lòng bao gồm ID radar của bạn để việc sao chép dễ dàng hơn
Daniel Galasko

11

Điều giải quyết vấn đề cho tôi là khởi động lại trình giả lập, và đặt lại nội dung và cài đặt.


Nó cũng giúp tiêu diệt ứng dụng trước khi thiết lập lại trình giả lập và khởi động lại máy Mac. Tôi thường thay đổi địa điểm với các điểm wifi khác nhau và đây là một quy trình khắc phục sự cố cho tôi.
Vladimír Slavík

11

Cũng gặp sự cố với beta 5 và AFNetworking 1.3 khi chạy trên trình giả lập iOS 8 dẫn đến lỗi kết nối:

Tên miền = NSURLErrorDomain Code = -1005 "Kết nối mạng bị mất."

Mã tương tự hoạt động tốt trên trình giả lập iOS 7 và 7.1 và proxy gỡ lỗi của tôi cho thấy lỗi xảy ra trước khi kết nối thực sự được thử (nghĩa là không có yêu cầu nào được ghi lại).

Tôi đã theo dõi sự thất bại của NSURLConnection và báo cáo lỗi cho Apple. Xem dòng 5 trong hình ảnh đính kèm:

Đại biểu khách hàng NSURLConnection đã không thành công.

Thay đổi để sử dụng httpscho phép kết nối từ trình giả lập iOS 8 mặc dù có lỗi không liên tục.

Vấn đề vẫn còn trong Xcode 6.01 (gm).


Tôi thấy vấn đề tương tự với NSURLSession và NSURLConnection, đó là loại trừ vấn đề với AFNetworking. Ngoài ra tôi thấy nó hoạt động với https và thất bại với http. Tôi vẫn không thể tìm thấy bất kỳ giải pháp, bạn đã có bất kỳ giải pháp?
VoidStack

Không có giải pháp nào được báo cáo là lỗi (18072300) sẽ thêm nhận xét về https hoạt động đó là thông tin tốt.
ptc

bạn có thể dán liên kết lỗi ở đây? Cảm ơn vì tôi nghĩ rằng tôi có cùng một vấn đề nhưng tôi chỉ sử dụng NSURLConnection (và các đại biểu) nhưng tôi nhận được thông báo lỗi tương tự
szuniverse

Không thể chia sẻ báo cáo lỗi của Apple. Vẫn mở và vẫn hiện diện trong XCODE 6 beta 7. Nếu bạn gửi báo cáo lỗi cũng sẽ được ưu tiên.
ptc

Có vẻ như vấn đề này là trên trình giả lập iOS và tôi mệt mỏi với thiết bị thực tế, nó hoạt động tốt. Gỡ lỗi thêm tôi thấy vấn đề là về cổng trên trình giả lập iOS, cổng https 443 hoạt động tốt và tôi đã sử dụng 8080 cho http, nó đã bị lỗi. Tôi đã thử sử dụng (các) cổng khác và có thể thực hiện cuộc gọi http trên trình giả lập iOS. Có vẻ như lỗi trong beta Xcode 6, cần phải chờ Xcode ổn định 6.
VoidStack

10

Tôi đã gặp vấn đề này trong khi sử dụng Alamofire. Sai lầm của tôi là tôi đã gửi một từ điển trống [:]cho các tham số theo GETyêu cầu, thay vì gửi niltham số.

Hi vọng điêu nay co ich!


NHẬN và POST với từ điển cơ thể trống [:] sẽ gây ra lỗi này một cách ngẫu nhiên. Tôi đang sử dụng Python Flask cho các API REST phụ trợ, điều này cũng có thể hữu ích.
Mahmoud Fayez

10

Khai mạc Charles đã giải quyết vấn đề cho tôi, điều này có vẻ rất lạ ...

Charles là proxy HTTP / màn hình HTTP / Proxy ngược cho phép nhà phát triển xem tất cả lưu lượng HTTP và SSL / HTTPS giữa máy của họ và Internet. Điều này bao gồm các yêu cầu, phản hồi và các tiêu đề HTTP (chứa cookie và thông tin bộ đệm).


1
Điều này cũng đúng với tôi, tôi nghĩ bởi vì charles sử dụng chứng chỉ ssl để ủy quyền cho trình tổng hợp yêu cầu nó thực hiện một thủ thuật tương tự như sử dụng https
thiếu vào

1
Điều này làm việc cho tôi mọi lúc! Đã thử nó 30 lần và nó hoạt động 30 trên 30. Tôi nghĩ rằng đó là sán, nhưng thật tốt khi biết nó không phải là tôi.
jdog

2
Charles là một công cụ ủy quyền cho phép bạn xem lưu lượng truy cập từ máy của mình. Kiểm tra charlesproxy.com để biết chi tiết. Chứng chỉ Charles SSL có thể gây rối với khả năng của trình giả lập để thực hiện các yêu cầu mạng.
Colin Tremblay

@ColinTremblay Tôi nghĩ rằng trình giả lập / thiết bị của bạn được định cấu hình để sử dụng proxy. Xóa proxy cũng sẽ hoạt động.
bikram990

Vô lý, điều này làm việc cho tôi quá. Cần phải mở Charles sau đó đặt lại cài đặt Trình mô phỏng iOS.
Matt Andrew

6

Xem bình luận pjebs vào ngày 5 tháng 1 trên Github.

Phương pháp 1:

if (error.code == -1005)
{
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{

        dispatch_group_t downloadGroup = dispatch_group_create();
        dispatch_group_enter(downloadGroup);
        dispatch_group_wait(downloadGroup, dispatch_time(DISPATCH_TIME_NOW, 5000000000)); // Wait 5 seconds before trying again.
        dispatch_group_leave(downloadGroup);
        dispatch_async(dispatch_get_main_queue(), ^{
            //Main Queue stuff here
            [self redoRequest]; //Redo the function that made the Request.
        });
    });

    return;
}

Ngoài ra một số gợi ý để kết nối lại với trang web,

tức là bắn yêu cầu POST TWICE

Giải pháp: Sử dụng một phương thức để thực hiện kết nối đến trang web, return (id), nếu kết nối mạng bị mất, quay lại sử dụng cùng một phương thức.

Phương pháp 2

-(id) connectionSitePost:(NSString *) postSender Url:(NSString *) URL {
     // here set NSMutableURLRequest =>  Request

    NSHTTPURLResponse *UrlResponse = nil;
    NSData *ResponseData = [[NSData alloc] init];

    ResponseData = [NSURLConnection sendSynchronousRequest:Request returningResponse:&UrlResponse error:&ErrorReturn];

     if ([UrlResponse statusCode] != 200) {

          if ([UrlResponse statusCode] == 0) {

                  /**** here re-use method ****/
                  return [self connectionSitePost: postSender Url: URL];
          }

     } else {
          return ResponseData;
     }

}

Phương pháp 1 đã giúp tôi rất nhiều .. Cảm ơn
Abhishek Mitra

4

Tôi cũng đã nhận được lỗi này, nhưng trên các thiết bị thực tế chứ không phải là trình giả lập. Chúng tôi đã nhận thấy lỗi khi truy cập vào phụ trợ heroku của chúng tôi trên HTTPS (máy chủ gunicorn) và thực hiện POSTS với số lượng lớn (mọi thứ trên 64Kb). Chúng tôi sử dụng HTTP Basic Auth để xác thực và nhận thấy lỗi đã được khắc phục bằng cách KHÔNG sử dụng didReceiveChallenge:phương thức ủy nhiệm trên NSURLSession, mà thay vào đó là nướng trong Xác thực vào tiêu đề yêu cầu ban đầu thông qua việc thêm Authentiation: Basic <Base64Encoded UserName:Password>. Điều này ngăn chặn 401 cần thiết để kích hoạt didReceiveChallenge:thông báo đại biểu và mất kết nối mạng tiếp theo.


Cảm ơn bạn rất nhiều vì bình luận có giá trị của bạn. Bạn đã đúng nếu tôi tải lên dưới chuỗi cơ sở 64 kb của hình ảnh, nó sẽ được tải lên thành công.
Vinayak Bhor

3

Tôi đã có vấn đề tương tự. Giải pháp là đơn giản, tôi đã thiết lập HTTPBody, nhưng đã không được thiết lập HTTPMethodđể POST. Sau khi sửa lỗi này, mọi thứ đều ổn.


3

Tôi đã từng gặp vấn đề tương tự. Tôi không biết làm thế nào AFNetworking thực hiện yêu cầu https, nhưng lý do đối với tôi là vấn đề bộ nhớ cache của NSURLSession.

Sau khi ứng dụng của tôi theo dõi trở lại từ safari và sau đó gửi yêu cầu http, lỗi "tải http không thành công 1005" sẽ xuất hiện. Nếu tôi ngừng sử dụng "[NSURLSession sharedSession]", nhưng để sử dụng một cá thể NSURLSession có thể định cấu hình để gọi phương thức "dataTaskWithRequest:" như sau, vấn đề đã được giải quyết.

NSURLSessionConfiguration *config = [NSURLSessionConfiguration defaultSessionConfiguration];
config.requestCachePolicy = NSURLRequestReloadIgnoringLocalCacheData;
config.URLCache = nil;
self.session = [NSURLSession sessionWithConfiguration:config];

Chỉ cần nhớ để thiết lập config.URLCache = nil;.


1
Tôi nghĩ rằng tất cả những người khởi động lại thiết bị / giả lập hoặc đặt lại dữ liệu nên xem xét câu trả lời này. Đối với tôi tất cả các hành động của họ dường như xóa bộ nhớ cache mà thực sự khắc phục vấn đề. Vì vậy, có lẽ vấn đề URL Cache của nó. Tôi sẽ kiểm tra nó bây giờ.
Kamran Khan

2

Tôi đã phải thoát XCode, xóa nội dung thư mục DeruredData (~ / Library / Developer / Xcode / DeruredData hoặc / Library / Developer / Xcode / DeruredData) và thoát trình giả lập để thực hiện công việc này.


1
Hành động duy nhất có liên quan trong danh sách đó là khởi động lại trình giả lập. Khởi động lại Xcode và xóa dữ liệu phái sinh là quá mức.
Jeremy Huddleston Sequoia

2

Tôi cũng gặp vấn đề này, chạy trên thiết bị iOS 8. Đây là chi tiết một số chi tiết ở đây và dường như là một trường hợp iOS đang cố gắng sử dụng các kết nối đã hết thời gian. Vấn đề của tôi không giống như vấn đề Keep-Alive được giải thích trong liên kết đó, tuy nhiên dường như đó là kết quả cuối cùng.

Tôi đã khắc phục sự cố của mình bằng cách chạy khối đệ quy bất cứ khi nào tôi gặp lỗi -1005 và điều này làm cho kết nối cuối cùng được khắc phục mặc dù đôi khi đệ quy có thể lặp lại hơn 100 lần trước khi kết nối hoạt động, tuy nhiên nó chỉ thêm một giây khi chạy lần và tôi cá rằng đó chỉ là thời gian mà trình gỡ lỗi cần để in NSLog cho tôi.

Đây là cách tôi chạy một khối đệ quy với AFNetworking: Thêm mã này vào tệp lớp kết nối của bạn

// From Mike Ash's recursive block fixed-point-combinator strategy https://gist.github.com/1254684
dispatch_block_t recursiveBlockVehicle(void (^block)(dispatch_block_t recurse))
{
    // assuming ARC, so no explicit copy
    return ^{ block(recursiveBlockVehicle(block)); };
}
typedef void (^OneParameterBlock)(id parameter);
OneParameterBlock recursiveOneParameterBlockVehicle(void (^block)(OneParameterBlock recurse, id parameter))
{
    return ^(id parameter){ block(recursiveOneParameterBlockVehicle(block), parameter); };
}

Sau đó sử dụng nó như thế này:

+ (void)runOperationWithURLPath:(NSString *)urlPath
            andStringDataToSend:(NSString *)stringData
                    withTimeOut:(NSString *)timeOut
     completionBlockWithSuccess:(void (^)(AFHTTPRequestOperation *operation, id responseObject))success
                        failure:(void (^)(AFHTTPRequestOperation *operation, NSError *error))failure
{
    OneParameterBlock run = recursiveOneParameterBlockVehicle(^(OneParameterBlock recurse, id parameter) {
        // Put the request operation here that you want to keep trying
        NSNumber *offset = parameter;
        NSLog(@"--------------- Attempt number: %@ ---------------", offset);

        MyAFHTTPRequestOperation *operation =
            [[MyAFHTTPRequestOperation alloc] initWithURLPath:urlPath
            andStringDataToSend:stringData
            withTimeOut:timeOut];

        [operation setCompletionBlockWithSuccess:
            ^(AFHTTPRequestOperation *operation, id responseObject) {
                success(operation, responseObject);
            }
            failure:^(AFHTTPRequestOperation *operation2, NSError *error) {
                if (error.code == -1005) {
                    if (offset.intValue >= numberOfRetryAttempts) {
                        // Tried too many times, so fail
                        NSLog(@"Error during connection: %@",error.description);
                        failure(operation2, error);
                    } else {
                        // Failed because of an iOS bug using timed out connections, so try again
                        recurse(@(offset.intValue+1));
                    }
                } else {
                    NSLog(@"Error during connection: %@",error.description);
                    failure(operation2, error);
                }
            }];
        [[NSOperationQueue mainQueue] addOperation:operation];
    });
    run(@0);
}

Bạn sẽ thấy rằng tôi sử dụng một AFHTTPRequestOperationlớp con nhưng thêm mã yêu cầu của riêng bạn. Phần quan trọng là gọi recurse(@offset.intValue+1));để làm cho khối được gọi lại.


Lớp MyAFHTTPRequestOperation là gì?
jdog

Nó chỉ là một lớp con AFHTTPRequestOperation. Tôi sử dụng nó để xác định trước một số thứ như thời gian chờ và xác thực.
Darren

2

Nếu sự cố xảy ra trên thiết bị, hãy kiểm tra xem lưu lượng có đi qua proxy (Cài đặt> Wi-Fi> (thông tin)> Proxy HTTP). Tôi đã thiết lập thiết bị của mình để sử dụng với Charles, nhưng quên mất proxy. Có vẻ như không có Charles thực sự chạy lỗi này xảy ra.


2

Nếu bất kỳ ai cũng gặp phải lỗi này trong khi tải tệp lên máy chủ phụ trợ, hãy đảm bảo rằng máy chủ nhận có kích thước nội dung tối đa được phép cho phương tiện của bạn. Trong trường hợp của tôi, NGINX yêu cầu cao hơn client_max_body_size. NGINX sẽ từ chối yêu cầu trước khi tải lên xong để không có mã lỗi quay lại.


2

Tôi đã gặp lỗi trên thiết bị iOS 7 khi tôi đang sử dụng Xcode 6.2 beta.

Chuyển đổi lại từ Xcode 6.2 beta sang 6.1.1 đã khắc phục sự cố, ít nhất là trên thiết bị iOS 7.


Tôi không nghĩ có gì để giải quyết: hệ điều hành cơ bản làm giảm kết nối vì lý do hợp pháp hay không. Một ứng dụng nên được chuẩn bị để đối phó với nó (hoạt động ngoại tuyến hoặc bất cứ điều gì). Tất nhiên, giả sử SDK trong phiên bản xcode cụ thể của bạn không phải là lỗi: vì câu trả lời của tôi cho thấy 6.2 rất có thể là lỗi trong khi 6.1.1 là tốt. Một cái gì đó tương tự có thể được quan sát bây giờ khi xcode 6.4 có vẻ ổn định hợp lý trong khi 7.0.1 là một phần mềm cấp alpha. Hoặc có vẻ như vậy.
Anton Tropashko

2

Trên 2017-01-25Apple đã phát hành một câu hỏi kỹ thuật liên quan đến lỗi này:

Hỏi đáp kỹ thuật của Apple QA1941

Xử lý Kết nối mạng bị mất Lỗi lỗi

Trả lời: NSURLErrorNetworkConnectionLost bị lỗi -1005 trong miền lỗi NSURLErrorDomain và được hiển thị cho người dùng dưới dạng Bắt đầu Kết nối mạng bị mất. Lỗi này có nghĩa là kết nối TCP cơ bản mang yêu cầu HTTP bị ngắt kết nối trong khi yêu cầu HTTP đang được xử lý (xem bên dưới để biết thêm thông tin về điều này). Trong một số trường hợp, NSURLSession có thể thử lại các yêu cầu đó một cách tự động (cụ thể, nếu yêu cầu đó là tạm thời) nhưng trong các trường hợp khác, các tiêu chuẩn HTTP không cho phép.

https://developer.apple.com/lvern/archive/qa/qa1941/_index.html#//apple_Vf/doc/uid/DTS40017602


1

Có vấn đề trong nhiều tháng và cuối cùng đã phát hiện ra rằng khi chúng tôi vô hiệu hóa DNSSEC trên miền api của mình, mọi thứ đều ổn: Simple_smile:


2
Bạn có thể vui lòng giải thích?
Groot

1

Tôi đã kết nối qua VPN. Vô hiệu hóa VPN đã giải quyết vấn đề.


1

Tôi đã gặp phải lỗi này khi chuyển NSURLRequest sang NSURLSession mà không đặt HTTPMethod của yêu cầu .

NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:urlComponents.URL];

Lỗi tên miền = NSURLErrorDomain Code = -1005 "Kết nối mạng bị mất."

Thêm HTTPMethod, mặc dù, và kết nối hoạt động tốt

NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:urlComponents.URL];
[request setHTTPMethod:@"PUT"];

1

Kiểm tra nếu bạn có thể yêu cầu từ các ứng dụng khác (như safari). Nếu không có thể là một cái gì đó trên máy tính của bạn. Trong trường hợp của tôi, tôi gặp vấn đề này với Avast Antivirus, đã chặn yêu cầu giả lập của tôi (đừng hỏi tôi tại sao).


1

Khởi động lại máy tính đã khắc phục sự cố cho tôi với Xcode9.1. Tôi đã khởi động lại trình giả lập và Xcode, nó không hoạt động.


1

Tôi đã phải đối mặt với cùng một vấn đề, tôi đã kích hoạt Điều hòa liên kết mạng để kiểm tra mạng chậm cho ứng dụng. Điều đó đã tạo ra lỗi này một số lần, Khi tôi đã vô hiệu hóa nó Settings > Developer > Network Link Conditioner, nó đã giải quyết vấn đề của tôi.

nhập mô tả hình ảnh ở đây

Hy vọng điều này sẽ giúp ai đó.


1

Trong trường hợp của tôi, đó là vì tôi đã kết nối với HTTP và nó đang chạy trên HTTPS


0

Tôi đã có vấn đề này vì lý do sau.

TLDR: Kiểm tra xem bạn có đang gửi GETyêu cầu nên gửi các tham số trên url thay vì trên thuộc NSURLRequest's HTTBodytính không.

==================================================

Tôi đã gắn một bản tóm tắt mạng trên ứng dụng của mình và nó hoạt động khá tốt cho tất cả các yêu cầu của tôi.

Tôi đã thêm một yêu cầu mới vào một dịch vụ web khác (không phải của riêng tôi) và nó bắt đầu ném cho tôi lỗi này.

Tôi đã đi đến một sân chơi và bắt đầu từ việc xây dựng một yêu cầu barebones, và nó đã hoạt động. Vì vậy, tôi bắt đầu tiến gần đến sự trừu tượng của mình cho đến khi tôi tìm ra nguyên nhân.

Việc triển khai trừu tượng hóa của tôi có một lỗi: Tôi đã gửi một yêu cầu được cho là gửi các tham số được mã hóa trong url và tôi cũng đang điền vào thuộc NSURLRequest's HTTBodytính với các tham số truy vấn. Ngay khi tôi gỡ bỏ HTTPBodynó hoạt động.


0

Tôi đã nhận được lỗi này và cũng nhận thấy rằng Postman cũng bị lỗi nhưng đang hoạt động trong ứng dụng Advanced Rest Client (ARC) và hoạt động trong Android. Vì vậy, tôi đã phải cài đặt Charles để gỡ lỗi liên lạc và tôi nhận thấy mã phản hồi là -1. Vấn đề là lập trình viên REST quên trả về mã phản hồi 200.

Tôi hy vọng rằng điều này sẽ giúp các nhà phát triển khác.


0

Bất cứ khi nào gặp lỗi -1005 thì cần gọi lại API.

AFHTTPRequestOperationManager *manager = 
[AFHTTPRequestOperationManager manager];
[manager setSecurityPolicy:policy];
manager.requestSerializer = [AFHTTPRequestSerializer serializer];
manager.responseSerializer = [AFHTTPResponseSerializer serializer];

[manager POST:<example-url>
   parameters:<parameteres>
    success:^(AFHTTPRequestOperation *operation, id responseObject) {
      NSLog(@“Success: %@", responseObject);
  } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
      NSLog(@"Error: %@", error);
      if (error.code == -1005) {
          // Call method again... 
       }
  }];

Bạn cần thêm mã của bạn để gọi lại chức năng. MakeSure rằng bạn đã gọi phương thức một lần nếu không vòng lặp đệ quy cuộc gọi của nó.


0

Trên tất cả các câu trả lời tôi tìm thấy một giải pháp tốt đẹp. Trên thực tế Vấn đề liên quan đến kết nối mạng không thành công cho onword iOS 12 là do có lỗi trong onword iOS 12.0. Và nó vẫn chưa được giải quyết. Tôi đã đi qua cộng đồng trung tâm git cho vấn đề liên quan đến AFNetworking khi ứng dụng xuất phát từ nền tảng và cố gắng thực hiện cuộc gọi mạng và không thành công khi thiết lập kết nối. Tôi dành 3 ngày cho việc này và cố gắng nhiều thứ để đi đến nguyên nhân gốc rễ cho việc này và không tìm thấy gì. Cuối cùng tôi cũng nhận được một chút ánh sáng trong bóng tối khi tôi viết blog này https://github.com/AFNetworking/AFNetworking/issues/4279

Người ta nói rằng có một lỗi trong iOS 12. Về cơ bản, bạn không thể mong đợi một cuộc gọi mạng sẽ hoàn tất nếu ứng dụng os không ở phía trước. Và do lỗi này, các cuộc gọi mạng bị hủy và chúng tôi gặp lỗi mạng trong nhật ký.

Đề nghị tốt nhất của tôi cho bạn là cung cấp một số độ trễ khi ứng dụng của bạn chuyển từ nền sang tiền cảnh và có cuộc gọi mạng. Thực hiện cuộc gọi mạng đó trong công văn không đồng bộ với một số độ trễ. Bạn sẽ không bao giờ bị rớt mạng hoặc mất kết nối mạng.

Đừng chờ đợi Apple để vấn đề này giải quyết cho iOS 12 vì nó vẫn chưa được khắc phục. Bạn có thể giải quyết vấn đề này bằng cách cung cấp một số độ trễ cho yêu cầu mạng của bạn là NSURLCconnectection, NSURLSession hoặc AFNetworking hoặc ALAMOFIRE. Chúc mừng :)


0

Tôi đã gặp vấn đề tương tự trong khi gọi bằng máy chủ của công ty tôi từ ứng dụng iOS 12 bằng thiết bị vật lý. Vấn đề là đĩa cứng máy chủ đã đầy. Giải phóng không gian trong máy chủ đã giải quyết vấn đề.

Tôi đã tìm thấy lỗi tương tự trong một tình huống khác mà tôi nghĩ do thời gian chờ không thể tham số thông qua API Mạng tiêu chuẩn do Apple cung cấp ( URLSession.timeoutIntervalForRequestURLSession.timeoutIntervalForResource). Ngay cả ở đó .. làm cho máy chủ trả lời nhanh hơn giải quyết vấn đề

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.