{"version":"https:\/\/jsonfeed.org\/version\/1","title":"Just Developer Blog, \u0437\u0430\u043c\u0435\u0442\u043a\u0438 \u0441 \u0442\u0435\u0433\u043e\u043c: using of NSUrlSession","home_page_url":"http:\/\/bibobo.ru\/tags\/using-of-nsurlsession\/","feed_url":"http:\/\/bibobo.ru\/tags\/using-of-nsurlsession\/json\/","icon":false,"author":{"name":"\u0415\u0432\u0433\u0435\u043d\u0438\u0439 \u0418\u0432\u043e\u043d (Evgeniy Ivon)","url":"http:\/\/bibobo.ru\/","avatar":false},"items":[{"id":"27","url":"http:\/\/bibobo.ru\/all\/ispolzovanie-nsurlsession-dlya-zagruzki-faylov-ios\/","title":"\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 NSUrlSession \u0434\u043b\u044f\u00a0\u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0444\u0430\u0439\u043b\u043e\u0432 (iOS)","content_html":"<p>\u041f\u0440\u0438\u00a0\u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043e\u0447\u0435\u043d\u044c \u0447\u0430\u0441\u0442\u043e \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u0435\u0442 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u044c \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0443 \u0444\u0430\u0439\u043b\u0430 \u043f\u043e\u00a0\u0441\u0435\u0442\u0438. \u041f\u0440\u0438\u00a0\u044d\u0442\u043e\u043c \u0435\u0441\u043b\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0432\u0435\u0434\u0435\u0442\u0441\u044f \u043d\u0430\u00a0Xamarin \u0432\u044b\u0441\u043e\u043a\u043e \u0436\u0435\u043b\u0430\u043d\u0438\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 WebClient \u0434\u043b\u044f\u00a0\u044d\u0442\u0438\u0445 \u0446\u0435\u043b\u0435\u0439. \u0412\u0441\u0435\u00a0\u0431\u044b \u043d\u0438\u0447\u0435\u0433\u043e, \u043d\u043e\u00a0\u043f\u0440\u0438\u00a0\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 WebClient \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u0435\u0442 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u0435\u0439, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440:<\/p>\n<p><\/br><\/p>\n<ol start=\"1\">\n<li>\u041d\u0435\u00a0\u0432\u044b\u0441\u043e\u043a\u0430\u044f \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c<\/li>\n<li>\u041f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0435 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u043f\u0440\u0438\u00a0\u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0438\u043b\u0438\u00a0\u0443\u0445\u043e\u0434\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0432\u00a0\u0431\u0435\u043a\u0433\u0440\u0430\u0443\u043d\u0434<br \/>\n<\/br><\/li>\n<\/ol>\n<p>\u0414\u043b\u044f\u00a0\u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0432\u043e\u043f\u0440\u043e\u0441\u0430 \u0441\u00a0\u0437\u0430\u0433\u0440\u0443\u0437\u043a\u043e\u0439 \u0444\u0430\u0439\u043b\u043e\u0432 \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u043c \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u043c \u0431\u0443\u0434\u0435\u0442 \u043a\u0430\u0440\u0434\u0438\u043d\u0430\u043b\u044c\u043d\u043e \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u0430\u0442\u044c \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0443 \u043d\u0430\u00a0\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 NSUrlSession.<\/p>\n<p><input id=\"button_ios_download_file_in_background\" type=\"button\" onclick=\"toggle(cut_ios_download_file_in_background, button_ios_download_file_in_background)\" value=\"\u0427\u0438\u0442\u0430\u0442\u044c \u0434\u0430\u043b\u044c\u0448\u0435\" hiddenText=\"\u0421\u0432\u0435\u0440\u043d\u0443\u0442\u044c\" visibleText=\"\u0427\u0438\u0442\u0430\u0442\u044c \u0434\u0430\u043b\u044c\u0448\u0435\"><\/p>\n<div id=\"cut_ios_download_file_in_background\" style=\"display: none;\" displayOld=\"\"><p><\/p>\n<p><br><\/p>\n<p>NSUrlSession\u00a0\u2014 \u044d\u0442\u043e \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0439 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c iOS, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0438\u0439 \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u044b \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0438\u00a0\u0437\u0430\u043b\u0438\u0432\u043a\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u043e\u00a0\u0441\u0435\u0442\u0438, \u043f\u0440\u0438\u00a0\u044d\u0442\u043e\u043c \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0441\u0430\u043c\u0430 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043e\u0431\u0440\u044b\u0432\u044b \u0441\u0432\u044f\u0437\u0438, \u0434\u043e\u043a\u0430\u0447\u0430\u0435\u0442 \u0444\u0430\u0439\u043b, \u0435\u0441\u043b\u0438 \u044d\u0442\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0438\u00a0\u0443\u0432\u0435\u0434\u043e\u043c\u0438\u0442 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043e\u00a0\u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435.<\/p>\n<p>\u0427\u0442\u043e\u0431\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c NSUrlSession \u043d\u0430\u043c \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435:<\/p>\n<p><\/br><\/p>\n<ol start=\"1\">\n<li>\u0421\u043e\u0437\u0434\u0430\u0442\u044c \u043a\u043b\u0430\u0441\u0441-\u0445\u044d\u043b\u043f\u0435\u0440, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u0438\u043d\u043a\u0430\u043f\u0441\u0443\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u0441\u044e \u043b\u043e\u0433\u0438\u043a\u0443 \u0440\u0430\u0431\u043e\u0442\u044b \u0441\u00a0NSUrlSession<\/li>\n<li>\u0421\u043e\u0437\u0434\u0430\u0442\u044c \u043a\u043b\u0430\u0441\u0441-\u0434\u0435\u043b\u0435\u0433\u0430\u0442 \u043d\u0430\u0441\u043b\u0435\u0434\u043d\u0438\u043a NSUrlSessionDownloadDelegate, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u044f\u0442\u044c \u0432\u043d\u0435\u0448\u043d\u0438\u0439 \u043a\u043e\u0434 \u043e\u00a0\u043f\u0440\u043e\u0433\u0440\u0435\u0441\u0441\u0435 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0444\u0430\u0439\u043b\u0430, \u0430\u00a0\u0442\u0430\u043a\u00a0\u0436\u0435 \u043e\u0431\u00a0\u043e\u043a\u043e\u043d\u0447\u0430\u043d\u0438\u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438<\/li>\n<li>\u0421\u043e\u0437\u0434\u0430\u0442\u044c \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 \u043a\u043b\u0430\u0441\u0441\u0430 NSUrlSession \u0438\u00a0\u043f\u0440\u0438\u0441\u0432\u043e\u0438\u0442\u044c \u0435\u043c\u0443 \u0434\u0435\u043b\u0435\u0433\u0430\u0442<\/li>\n<li>\u0414\u043b\u044f\u00a0\u043a\u0430\u0436\u0434\u043e\u0433\u043e URL \u0444\u0430\u0439\u043b\u0430 \u0441\u043e\u0437\u0434\u0430\u0442\u044c NSUrlRequest \u0438\u00a0NSUrlSessionDownloadTask, \u0438\u00a0\u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0441\u043a\u0430\u0447\u0438\u0432\u0430\u043d\u0438\u0435<\/li>\n<li>\u0422\u0430\u043a\u00a0\u0436\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u043e\u0437\u0430\u0431\u043e\u0442\u0438\u0442\u044c\u0441\u044f \u043e\u00a0\u0442\u043e\u043c, \u0447\u0442\u043e\u0431\u044b \u043d\u0435\u00a0\u043f\u043e\u0442\u0435\u0440\u044f\u0442\u044c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e\u00a0\u0442\u043e\u043c, \u043a\u0430\u043a\u043e\u043c\u0443 Url \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u043a\u0430\u043a\u043e\u0439 NSUrlSessionDownloadTask, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u0442\u043e\u043c \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e \u0441\u043e\u043e\u0431\u0449\u0430\u0442\u044c \u0432\u043d\u0435\u0448\u043d\u0435\u043c\u0443 \u043a\u043e\u0434\u0443 \u043e\u00a0\u0445\u043e\u0434\u0435 \u0441\u043a\u0430\u0447\u0438\u0432\u0430\u043d\u0438\u044f<br \/>\n<\/br><\/li>\n<\/ol>\n<p>\u0414\u0430\u043b\u0435\u0435 \u043a\u043e\u0434 \u0433\u043e\u0442\u043e\u0432\u043e\u0433\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0441\u00a0\u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u043c\u0438 \u043e\u00a0\u0434\u0435\u0442\u0430\u043b\u044f\u0445 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438:<\/p>\n<pre class=\"e2-text-code\"><code>\/\/\/ &lt;summary&gt;\r\n\/\/\/ \u041a\u043b\u0430\u0441\u0441, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442 \u0432\u0441\u044e \u0440\u0430\u0431\u043e\u0442\u0443 \u0441 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u043e\u043c NSUrlSession \u0434\u043b\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0444\u0430\u0439\u043b\u043e\u0432 \u0432 \u0444\u043e\u043d\u043e\u0432\u043e\u043c \u0440\u0435\u0436\u0438\u043c\u0435\r\n\/\/\/ &lt;\/summary&gt;\r\npublic class DownloadSession\r\n{\r\n    \/\/\/ &lt;summary&gt;\r\n    \/\/\/ \u0421\u043e\u0437\u0434\u0430\u0435\u043c \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u0434\u043b\u044f \u0441\u0435\u0441\u0441\u0438\u0438 (\u0441 \u0442\u0430\u043a\u0438\u043c ID \u0441\u0435\u0441\u0441\u0438\u044f \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u043d\u0430 \u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438)\r\n    \/\/\/ &lt;\/summary&gt;\r\n    private static NSUrlSessionConfiguration _downloadConfiguration = NSUrlSessionConfiguration.BackgroundSessionConfiguration(&quot;com.appid.background.download&quot;);\r\n\r\n    \/\/\/ &lt;summary&gt;\r\n    \/\/\/ \u041a\u043b\u0430\u0441\u0441-\u0434\u0435\u043b\u0435\u0433\u0430\u0442, \u0438\u043d\u043a\u0430\u043f\u0441\u0443\u043b\u0438\u0440\u0443\u0435\u0442 \u0432\u0441\u044e \u043b\u043e\u0433\u0438\u043a\u0443 \u043f\u043e \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u044e \u0432\u043d\u0435\u0448\u043d\u0435\u0433\u043e \u043a\u043e\u0434\u0430 \u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438, \u0430 \u0442\u0430\u043a \u0436\u0435 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442\u0441\u044f \u043c\u0435\u043d\u0435\u0434\u0436\u043c\u0435\u043d\u0442\u043e\u043c \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0441\u0441\u044b\u043b\u043e\u043a \u043d\u0430 \u0441\u043a\u0430\u0447\u0438\u0432\u0430\u0435\u043c\u044b\u0435 \u0444\u0430\u0439\u043b\u044b\r\n    \/\/\/ &lt;\/summary&gt;\r\n    public sealed class ChatBackgroundSessionDelegate : NSUrlSessionDownloadDelegate\r\n    {\r\n        \/\/\/ &lt;summary&gt;\r\n        \/\/\/ \u0421\u043b\u043e\u0432\u0430\u0440\u044c, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0445\u0440\u0430\u043d\u0438\u0442 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0435 - \u0442\u0430\u0441\u043a \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 &lt;--&gt; url \u0444\u0430\u0439\u043b\u0430\r\n        \/\/\/ &lt;\/summary&gt;\r\n        public Dictionary&lt;NSUrlSessionDownloadTask, string&gt; QueueHolder { get; private set; }\r\n\r\n        public delegate void DownloadingCompleteDelegate(string url, NSUrl tempFileLocation);\r\n        public delegate void DownloadProgressDelegate(string url, int progressPercent);\r\n\r\n        \/\/\/ &lt;summary&gt;\r\n        \/\/\/ \u042d\u043a\u0448\u043d, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u043f\u0440\u0438 \u043e\u043a\u043e\u043d\u0447\u0430\u043d\u0438\u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0444\u0430\u0439\u043b\u0430 (\u0432 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u0445 \u0431\u0443\u0434\u0443\u0442 url \u0444\u0430\u0439\u043b\u0430 \u0438 NSUrl \u043d\u0430 \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0439 \u0441\u043a\u0430\u0447\u0430\u043d\u043d\u044b\u0439 \u0444\u0430\u0439\u043b)\r\n        \/\/\/ &lt;\/summary&gt;\r\n        public DownloadingCompleteDelegate CompleteAction { get{ return _completeAction; } set{ _completeAction = value; } }\r\n        private DownloadingCompleteDelegate _completeAction;\r\n\r\n        \/\/\/ &lt;summary&gt;\r\n        \/\/\/ \u042d\u043a\u0448\u043d, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u043f\u0440\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0438 \u043f\u0440\u043e\u0433\u0440\u0435\u0441\u0441\u0430 \u0441\u043a\u0430\u0447\u0438\u0432\u0430\u043d\u0438\u044f \u0444\u0430\u0439\u043b\u0430 (\u0432 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u0445 \u0431\u0443\u0434\u0435\u0442 url \u0444\u0430\u0439\u043b\u0430 \u0438 \u043f\u0440\u043e\u0446\u0435\u043d\u0442 \u0441\u043a\u0430\u0447\u0438\u0432\u0430\u043d\u0438\u044f)\r\n        \/\/\/ &lt;\/summary&gt;\r\n        public DownloadProgressDelegate ProgressDelegate { get{ return _progressDelegate; } set{ _progressDelegate = value; } }\r\n        private DownloadProgressDelegate _progressDelegate;\r\n\r\n        \/\/\/ &lt;summary&gt;\r\n        \/\/\/ \u041a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u043e\u0437\u0434\u0430\u0435\u0442 \u0441\u043b\u043e\u0432\u0430\u0440\u044c-\u043e\u0447\u0435\u0440\u0435\u0434\u044c \u0438 \u043f\u0440\u0438\u0441\u0432\u0430\u0438\u0432\u0430\u0435\u0442 \u0432\u0441\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u044d\u043a\u0448\u043d\u044b\r\n        \/\/\/ &lt;\/summary&gt;\r\n        public ChatBackgroundSessionDelegate(DownloadingCompleteDelegate downloadCompleteAction, DownloadProgressDelegate progressDelegate = null)\r\n        {\r\n            _completeAction = downloadCompleteAction;\r\n            _progressDelegate = progressDelegate;\r\n\r\n            QueueHolder = new Dictionary&lt;NSUrlSessionDownloadTask, string&gt;();\r\n        }\r\n\r\n        \/\/\/ &lt;summary&gt;\r\n        \/\/\/ \u041c\u0435\u0442\u043e\u0434, \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u043e\u0439 \u043f\u0440\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0438 \u043f\u0440\u043e\u0433\u0440\u0435\u0441\u0441\u0430 \u0441\u043a\u0430\u0447\u0438\u0432\u0430\u043d\u0438\u044f \u0444\u0430\u0439\u043b\u043e\u0432\r\n        \/\/\/ &lt;\/summary&gt;\r\n        public override void DidWriteData (NSUrlSession session, NSUrlSessionDownloadTask downloadTask, long bytesWritten, long totalBytesWritten, long totalBytesExpectedToWrite)\r\n        {\r\n            if (_progressDelegate == null || !QueueHolder.ContainsKey(downloadTask))\r\n            {\r\n                return;\r\n            }\r\n\r\n            \/\/\u0435\u0441\u043b\u0438 \u0432 \u043e\u0447\u0435\u0440\u0435\u0434\u0438 \u043d\u0430\u0439\u0434\u0435\u043d \u0442\u0430\u043a\u043e\u0439 \u0444\u0430\u0439\u043b \u0438 \u044d\u043a\u0448\u043d \u0431\u044b\u043b \u043f\u0435\u0440\u0435\u0434\u0430\u043d \u0438\u0437\u0432\u043d\u0435 - \u0442\u043e \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u043c \u044d\u043a\u0448\u043d \u0432 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c \u043f\u043e\u0442\u043e\u043a\u0435 \u0438 \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u043c \u043f\u0440\u043e\u0446\u0435\u043d\u0442 \u0441\u043a\u0430\u0447\u0438\u0432\u0430\u043d\u0438\u044f \u0444\u0430\u0439\u043b\u0430\r\n            InvokeOnMainThread(() =&gt;\r\n                {\r\n                    _progressDelegate.Invoke(QueueHolder[downloadTask], Convert.ToInt32(totalBytesWritten * 100 \/ totalBytesExpectedToWrite));\r\n                });\r\n        }\r\n\r\n        \/\/\/ &lt;summary&gt;\r\n        \/\/\/ \u041c\u0435\u0442\u043e\u0434, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u0438 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0444\u0430\u0439\u043b\u0430\r\n        \/\/\/ &lt;\/summary&gt;\r\n        public override void DidFinishDownloading(NSUrlSession session, NSUrlSessionDownloadTask downloadTask, NSUrl location)\r\n        {\r\n            if (_completeAction == null || !QueueHolder.ContainsKey(downloadTask))\r\n            {\r\n                return;\r\n            }\r\n\r\n            InvokeOnMainThread(() =&gt;\r\n                {\r\n                    _completeAction.Invoke(QueueHolder[downloadTask], location);\r\n                });\r\n        }\r\n    }\r\n\r\n    private ChatBackgroundSessionDelegate _delegate;\r\n    private NSUrlSession _downloadSession;\r\n\r\n    \/\/\/ &lt;summary&gt;\r\n    \/\/\/ \u041a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440 \u043a\u043b\u0430\u0441\u0441\u0430-\u0445\u043e\u043b\u0434\u0435\u0440\u0430\r\n    \/\/\/ &lt;\/summary&gt;\r\n    public DownloadSession(ChatBackgroundSessionDelegate.DownloadingCompleteDelegate downloadCompleteAction,\r\n        ChatBackgroundSessionDelegate.DownloadProgressDelegate progressDelegate = null)\r\n    {\r\n        \/\/\u0441\u043e\u0437\u0434\u0430\u0435\u043c \u0434\u0435\u043b\u0435\u0433\u0430\u0442\r\n        _delegate = new ChatBackgroundSessionDelegate(downloadCompleteAction, progressDelegate);\r\n\r\n        \/\/\u0441\u043e\u0437\u0434\u0430\u0435\u043c \u0441\u0435\u0441\u0441\u0438\u044e (\u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0435\u0441\u043b\u0438 \u0441\u0435\u0441\u0441\u0438\u044f \u0441 \u0442\u0430\u043a\u043e\u0439 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0435\u0439 \u0443\u0436\u0435 \u0435\u0441\u0442\u044c \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0435 - \u0442\u043e \u043d\u043e\u0432\u0430\u044f \u0441\u0435\u0441\u0441\u0438\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0430 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442, \u0430 \u0432 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e \u043f\u043e\u043f\u0430\u0434\u0435\u0442 \u0441\u0442\u0430\u0440\u0430\u044f \u0441\u0435\u0441\u0441\u0438\u044f)\r\n        _downloadSession = NSUrlSession.FromConfiguration(\r\n            _downloadConfiguration,\r\n            _delegate,\r\n            new NSOperationQueue());\r\n    }\r\n\r\n    \/\/\/ &lt;summary&gt;\r\n    \/\/\/ \u0421\u0442\u0430\u0440\u0442\u0443\u0435\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438\r\n    \/\/\/ &lt;\/summary&gt;\r\n    \/\/\/ &lt;param name=&quot;url&quot;&gt;URL.&lt;\/param&gt;\r\n    \/\/\/ &lt;param name=&quot;file&quot;&gt;File.&lt;\/param&gt;\r\n    \/\/\/ &lt;param name=&quot;message&quot;&gt;Message.&lt;\/param&gt;\r\n    public void StartDownload(string url)\r\n    {\r\n        if (string.IsNullOrEmpty(url))\r\n        {\r\n            return;\r\n        }\r\n\r\n        NSUrl nsurl = NSUrl.FromString(new NSString(url).CreateStringByAddingPercentEscapes(NSStringEncoding.UTF8));\r\n        NSUrlRequest request = NSUrlRequest.FromUrl(nsurl);\r\n        NSUrlSessionDownloadTask task = _downloadSession.CreateDownloadTask(request);\r\n\r\n        \/\/\u043d\u0443\u0436\u043d\u043e \u0438\u043c\u0435\u043d\u043d\u043e \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0441\u0435\u0441\u0441\u0438\u044e \u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u0432\u0437\u044f\u044c \u0435\u0435 \u0434\u0435\u043b\u0435\u0433\u0430\u0442, \u043a\u0430\u0441\u0442\u0430\u043d\u0443\u0442\u044c \u0435\u0433\u043e \u043a \u043d\u0443\u0436\u043d\u043e\u043c\u0443 \u0442\u0438\u043f\u0443 \u0438 \u0437\u0430\u0431\u0438\u043d\u0434\u0438\u0442\u044c \u0440\u0435\u043a\u0432\u0435\u0441\u0442\u044b\r\n        \/\/\u0434\u0435\u043b\u0430\u0435\u043c \u0442\u0430\u043a, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0441\u0435\u0441\u0441\u0438\u044f \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u043e \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0435 \u0441\u043e\u0437\u0434\u0430\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u043d\u0430 \u0438 \u043f\u0440\u0438 \u043f\u043e\u043f\u044b\u0442\u043a\u0435 \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e\u0433\u043e \u0435\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f - \u043d\u043e\u0432\u044b\u0439 \u0434\u0435\u043b\u0435\u0433\u0430\u0442 \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0435 \u043f\u0440\u0438\u0441\u0432\u0430\u0438\u0432\u0430\u0435\u0442\u0441\u044f :)\r\n        \/\/\u044d\u043a\u0448\u043d\u044b \u043a\u043e\u043f\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u0438\u0437 \u043d\u043e\u0432\u043e\u0433\u043e \u0434\u0435\u043b\u0435\u0433\u0430\u0442\u0430 \u0432 \u0441\u0442\u0430\u0440\u044b\u0439, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043c\u044b \u043d\u0438\u043a\u0430\u043a \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438 \u043d\u0435 \u043c\u043e\u0436\u0435\u043c \u0437\u0430\u043c\u0435\u043d\u0438\u0442\u044c \u0434\u0435\u043b\u0435\u0433\u0430\u0442 (\u043e\u043d \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0447\u0442\u0435\u043d\u0438\u044f)\r\n        if (_delegate != (ChatBackgroundSessionDelegate)_downloadSession.Delegate)\r\n        {\r\n            ChatBackgroundSessionDelegate newDelegate = (ChatBackgroundSessionDelegate)_downloadSession.Delegate;\r\n            newDelegate.CompleteAction = _delegate.CompleteAction;\r\n            newDelegate.ProgressDelegate = _delegate.ProgressDelegate;\r\n        }\r\n        _delegate = (ChatBackgroundSessionDelegate)_downloadSession.Delegate;\r\n\r\n        \/\/\u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u043d\u0430\u0448 Url \u0438 \u0442\u0430\u0441\u043a \u0432 \u043e\u0447\u0435\u0440\u0435\u0434\u044c\r\n        _delegate.QueueHolder.Add(task, url);\r\n\r\n        \/\/\u0441\u0442\u0430\u0440\u0442\u0443\u0435\u043c \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0443\r\n        task.Resume();\r\n    }\r\n}<\/code><\/pre><p><\/br><\/p>\n<p>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432\u0441\u0435 \u044d\u0442\u043e \u0445\u043e\u0437\u044f\u0439\u0441\u0442\u0432\u043e \u043c\u043e\u0436\u043d\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/p>\n<pre class=\"e2-text-code\"><code>\/\/\u0441\u043e\u0437\u0434\u0430\u0435\u043c \u0441\u0435\u0441\u0441\u0438\u044e \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0434\u0430\u043d\u043d\u044b\u0445\r\nDownloadSession session = new DownloadSession((url, tempFileLocation) =&gt;\r\n    {\r\n        \/\/\u0435\u0441\u043b\u0438 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0430 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u0444\u0430\u0439\u043b\u0430 - \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c \u0435\u0433\u043e \u043d\u0430 \u0434\u0438\u0441\u043a\r\n        if (item.url == url)\r\n        {\r\n            \/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\r\n        }\r\n    }, (url, percent) =&gt;\r\n    {\r\n        if (item.url == url)\r\n        {\r\n            \/\/\u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u043c \u043f\u0440\u043e\u0433\u0440\u0435\u0441\u0441 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438\r\n        }\r\n    });\r\n\r\n\/\/\u0441\u0442\u0430\u0440\u0442\u0443\u0435\u043c \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0443\r\nsession.StartDownload(item.url);<\/code><\/pre><\/div>","date_published":"2016-01-03T10:53:01+03:00","date_modified":"2016-01-03T10:52:56+03:00","_date_published_rfc2822":"Sun, 03 Jan 2016 10:53:01 +0300","_rss_guid_is_permalink":"true","_rss_guid":"http:\/\/bibobo.ru\/all\/ispolzovanie-nsurlsession-dlya-zagruzki-faylov-ios\/","_e2_data":{"is_favourite":false,"links_required":["system\/library\/highlight\/highlight.js","system\/library\/highlight\/highlight.css","system\/library\/highlight\/highlight.js","system\/library\/highlight\/highlight.css"],"og_images":[]}}],"_e2_version":3254,"_e2_ua_string":"E2 (v3254; Aegea)"}