আইওএস 8 ডিভাইসে চলমান আমারও এই সমস্যা রয়েছে। এটি এখানে আরও বিশদযুক্ত এবং আইওএস এর একটি সংযোগ যা ইতিমধ্যে সময়সীমা শেষ হয়ে গেছে এমন সংযোগগুলি ব্যবহার করার চেষ্টা করছে বলে মনে হচ্ছে। আমার ইস্যুটি সেই লিঙ্কটিতে কীপ-অ্যালাইভ সমস্যাটি ব্যাখ্যা করার মতো নয়, তবে এটি একই শেষ ফলাফল বলে মনে হচ্ছে।
আমি যখনই কোনও ত্রুটি -১০৫ পেয়েছি তখন আমি পুনরাবৃত্তকারী ব্লকটি চালিয়ে আমার সমস্যাটি সংশোধন করেছি এবং এর ফলে সংযোগটি শেষ পর্যন্ত হয়ে যায় যদিও সংযোগটি কাজ করার আগে কখনও কখনও পুনরাবৃত্তিটি 100+ বার লুপ করতে পারে তবে এটি কেবলমাত্র রান চালিয়ে দ্বিতীয় মুহূর্তটি যোগ করে adds বার এবং আমি বাজি ধরছি যে সময়টি আমার জন্য এনএসএলোগুলি প্রিন্ট করতে ডিবাগারটি লাগে।
আমি কীভাবে এএফ নেটর্কেটিং দিয়ে একটি পুনরাবৃত্ত ব্লক চালাচ্ছি তা এখানে: আপনার সংযোগ শ্রেণীর ফাইলটিতে এই কোডটি যুক্ত করুন
// 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); };
}
তারপরে এটি পছন্দ করে নিন:
+ (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);
}
আপনি দেখতে পাবেন যে আমি একটি AFHTTPRequestOperation
সাবক্লাস ব্যবহার করি তবে আপনার নিজের অনুরোধ কোডটি যুক্ত করুন। গুরুত্বপূর্ণ অংশটি আবার কল recurse(@offset.intValue+1));
করার জন্য কল করছে।