Diese Präsentation wurde erfolgreich gemeldet.
Wir verwenden Ihre LinkedIn Profilangaben und Informationen zu Ihren Aktivitäten, um Anzeigen zu personalisieren und Ihnen relevantere Inhalte anzuzeigen. Sie können Ihre Anzeigeneinstellungen jederzeit ändern.

Интуит. Разработка приложений для iOS. Лекция 7. Работа с сетью

1.463 Aufrufe

Veröffentlicht am

Veröffentlicht in: Bildung
  • Als Erste(r) kommentieren

Интуит. Разработка приложений для iOS. Лекция 7. Работа с сетью

  1. 1. Работа с сетью Разработка приложений для iOS Лекция 7 Глеб Тарасов gleb34@gmail.com
  2. 2. Вспомним прошлое занятие
  3. 3. Как задается в Storyboard, какой контроллер будет показан при старте приложения?
  4. 4. Как задается в Storyboard, какой контроллер будет показан при старте приложения? стрелочка слева, указывающая на контроллер; либо галка «is initial controller»
  5. 5. Как в коде контроллера получить ссылку на UILabel из storyboard
  6. 6. Как в коде контроллера получить ссылку на UILabel из storyboard правой кнопкой от label в storyboard перетаскиваем в место, где пишут свойства, и создаем IBOutlet
  7. 7. Как по нажатию кнопки из storyboard выполнить метод в коде контроллера?
  8. 8. Как по нажатию кнопки из storyboard выполнить метод в коде контроллера? правой кнопкой от кнопки перетаскиваем в код и создаем IBAction
  9. 9. Как сделать, чтобы по нажатию на кнопку в navigation пушился другой контроллер?
  10. 10. Как сделать, чтобы по нажатию на кнопку в navigation пушился другой контроллер? Добавить в Storyboard этот контроллер, а потом правой кнопкой провести от кнопки к контроллеру и выбрать «push»
  11. 11. Блоки (лямбда выражения)
  12. 12. BasicBlock action = ^{ NSLog(@"Hello, world!"); }; action(); Блок кода без параметров
  13. 13. StringBlock action = ^(NSString *str) { NSLog(@"Hello, %@", str); }; action(@"world!"); Блок кода с параметром - строка
  14. 14. LoadBlock action = ^(BOOL success, NSArray *arr) { if (success) { self.array = arr; [self.tableView reloadData]; } else { self.errorLabel.hidden = NO; } }; Server *s = [[Server alloc] init]; [s loadUsersWithAction:action]; Блок кода с двумя параметрами
  15. 15. - (void)loadUsersWithAction:(LoadBlock)action { NSArray *users = ...; if (users) { action(YES, users); } else { action(NO, nil); } } Блок как параметр метода
  16. 16. typedef void(^BasicBlock)(); typedef void(^StringBlock)(NSString *str); typedef void(^LoadBlock)(BOOL success, NSArray *arr); Объявление типов блоков
  17. 17. http://fuckingblocksyntax.com
  18. 18. Потоки
  19. 19. // Main thread dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ // Background thread dispatch_async(dispatch_get_main_queue(), ^{ // Main thread }); }); Как запустить код в фоне, а потом обновить интерфейс
  20. 20. - (void)viewDidLoad { // Main thread [self.activityIndicator startAnimating]; self.server = [[Server alloc] init]; dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ . // Background thread self.users = [self.server loadUsers]; dispatch_async(dispatch_get_main_queue(), ^{ . // Main thread [self.activityIndicator stopAnimating]; if (self.users.count > 0) { [self.tableView reloadData]; self.tableView.hidden = NO; } else { self.emptyLabel.hidden = NO; } }); }); }
  21. 21. Загрузка данных
  22. 22. NSURL *url = [NSURL URLWithString:@"http://intuit.ru"]; NSString *str = [[NSString alloc] initWithContentsOfURL:url encoding:NSUTF8StringEncoding error:nil]; . NSLog(@"%@", str); NSURL *url = [NSURL URLWithString:@"http://www.intuit.ru/logo.png"]; NSData *data = [[NSData alloc] initWithContentsOfURL:url]; . NSLog(@"%@", data); Загрузить строку по ссылке Загрузить бинарные данные по ссылке
  23. 23. JSON
  24. 24. {! "firstName": "Иван",! "lastName": "Иванов",! "address": {! "streetAddress": "Московское ш., 101, кв.101",! "city": "Ленинград",! "postalCode": 101101! },! "phoneNumbers": [! "812 123-1234",! "916 123-4567"! ]! } http://ru.wikipedia.org/wiki/JSON
  25. 25. NSArray *arr = @[ @"str1", @"str2", @3 ]; NSData *data = [NSJSONSerialization dataWithJSONObject:arr options:0 error:nil]; . NSString *json = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; . NSLog(@"%@", json); Преобразовать массив в json
  26. 26. NSString *json = ...; NSData *data = [json dataUsingEncoding:NSUTF8StringEncoding]; NSArray *arr = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil]; NSLog(@"%@", arr); Преобразовать json в массив
  27. 27. JSON в dropbox для тренировки • поделиться ссылкой в dropbox • поменять в ссылке www на dl
  28. 28. CocoaPods (подключение сторонних библиотек)
  29. 29. http://cocoapods.org В консоли (Программы > Утилиты > Терминал): . $ sudo gem install cocoapods . . После этого, чтобы проверить: . $ pod search AFNetworking Установка Если выдаст ошибку, то сначала «sudo gem install rake» и нажать «Y», когда спросит, 6 а потом «sudo gem install cocoapods»
  30. 30. Как использовать? • создаем файл с именем Podfile в папке проекта • пишем там pod ‘Имя библиотеки’ • после этого в консоли в этой папке вызываем «pod install» • с этого момента запускаем не .xcodeproj файл, а .xcworkspace
  31. 31. Общение с сервером
  32. 32. HTTP - протокол передачи данных GET-запрос: вызов урла. http://site.com/folder/file.php?param1=v1&param2=v2 POST-запрос: вызов урла с параметрами. http://site.com/folder/file.php. . param1 = v1. param2 = v2
  33. 33. Вычитка списка магазинов (GET). http://site.com/api/shops.php. . Вычитка списка магазинов по категории (GET). http://site.com/api/shops.php?category=auto. . Авторизация (POST). http://site.com/api/login.php. login = user. password = 12345. . Отправка комментария к магазину (POST). http://site.com/api/send_comment.php. shop_id = 123. comment_text = отличный магазин. token = asdasdasdasd
  34. 34. Вычитка списка магазинов (GET). http://site.com/api/shops.php. {. "shops": [. {. "title": "Пятерочка",. "location": "50.12321,30.12324",. "rating": 4.5,. "comments_count": 20. },. {. "title": "Седьмой континент",. "location": "51.21321,34.132",. "rating": 4.8,. "comments_count": 17. }. ]. }
  35. 35. Авторизация (POST). http://site.com/api/login.php {. "result" : "error",. "error" : "Неверный пароль". } {. "result" : "success",. "token" : "kjhkdsfhsdofsdfsdf". }
  36. 36. Отправка комментария к магазину (POST). http://site.com/api/send_comment.php {. "result" : "success". }
  37. 37. AFNetworking (работа с сетью)
  38. 38. @interface ViewController () . @property (strong, nonatomic) AFHTTPSessionManager *manager; . @end - (void)viewDidLoad { [super viewDidLoad]; NSURL *baseUrl = [NSURL URLWithString:@"http:// api.worldweatheronline.com/free/v1/"]; self.manager = [[AFHTTPSessionManager alloc] initWithBaseURL:baseUrl]; self.manager.responseSerializer = [AFJSONResponseSerializer serializer]; } #import <AFNetworking/AFNetworking.h>
  39. 39. NSDictionary *params = @{ @"q" : @"Moscow", @"format" : @"json", @"num_of_days" : @1, @"key" : @"hnhq9j8ta97x5d9hbap7sk5q" }; . [self.manager GET:@"weather.ashx" parameters:params success:^(NSURLSessionDataTask *task, id responseObject) { NSDictionary *result = responseObject; NSLog(@"%@", result); } failure:^(NSURLSessionDataTask *task, NSError *error) { }]; GET-запрос
  40. 40. NSDictionary *params = @{ @"q" : @"Moscow", @"format" : @"json", @"num_of_days" : @1, @"key" : @"hnhq9j8ta97x5d9hbap7sk5q" }; . [self.manager POST:@"weather.ashx" parameters:params success:^(NSURLSessionDataTask *task, id responseObject) { NSDictionary *result = responseObject; NSLog(@"%@", result); } failure:^(NSURLSessionDataTask *task, NSError *error) { }]; POST-запрос
  41. 41. Домашнее задание • добавить работу с сервером в ваше приложение (либо загрузка файлов, либо загрузка картинок, либо загрузка данных через json). • можно просто через загрузку NSString и NSData, можно через AFNetworking
  42. 42. Всё! Глеб Тарасов gleb34@gmail.com twitter.com/pilot34

×