0
Работа с сетью
Разработка приложений для iOS
Лекция 7
Глеб Тарасов
gleb34@gmail.com
Вспомним прошлое
занятие
Как задается в Storyboard, какой
контроллер будет показан при
старте приложения?
Как задается в Storyboard, какой
контроллер будет показан при
старте приложения?
стрелочка слева, указывающая на контролле...
Как в коде контроллера получить
ссылку на UILabel из storyboard
Как в коде контроллера получить
ссылку на UILabel из storyboard
правой кнопкой от label в storyboard
перетаскиваем в место...
Как по нажатию кнопки из
storyboard выполнить метод в
коде контроллера?
Как по нажатию кнопки из
storyboard выполнить метод в
коде контроллера?
правой кнопкой от кнопки перетаскиваем в код и
соз...
Как сделать, чтобы по нажатию на
кнопку в navigation пушился другой
контроллер?
Как сделать, чтобы по нажатию на
кнопку в navigation пушился другой
контроллер?
Добавить в Storyboard этот контроллер, а п...
Блоки
(лямбда выражения)
BasicBlock action = ^{
NSLog(@"Hello, world!");
};
action();
Блок кода без параметров
StringBlock action = ^(NSString *str) {
NSLog(@"Hello, %@", str);
};
action(@"world!");
Блок кода с параметром - строка
LoadBlock action = ^(BOOL success, NSArray *arr) {
if (success)
{
self.array = arr;
[self.tableView reloadData];
}
else
{
...
- (void)loadUsersWithAction:(LoadBlock)action
{
NSArray *users = ...;
if (users)
{
action(YES, users);
}
else
{
action(NO,...
typedef void(^BasicBlock)();
typedef void(^StringBlock)(NSString *str);
typedef void(^LoadBlock)(BOOL success, NSArray *ar...
http://fuckingblocksyntax.com
Потоки
// Main thread
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
// Background thread
dispa...
- (void)viewDidLoad
{
// Main thread
[self.activityIndicator startAnimating];
self.server = [[Server alloc] init];
dispatc...
Загрузка данных
NSURL *url = [NSURL URLWithString:@"http://intuit.ru"];
NSString *str = [[NSString alloc] initWithContentsOfURL:url
encodi...
JSON
{!
"firstName": "Иван",!
"lastName": "Иванов",!
"address": {!
"streetAddress": "Московское ш., 101, кв.101",!
"city": "Лен...
NSArray *arr = @[ @"str1", @"str2", @3 ];
NSData *data = [NSJSONSerialization dataWithJSONObject:arr
options:0
error:nil];...
NSString *json = ...;
NSData *data = [json dataUsingEncoding:NSUTF8StringEncoding];
NSArray *arr = [NSJSONSerialization JS...
JSON в dropbox	

для тренировки
• поделиться ссылкой в dropbox	

• поменять в ссылке www на dl
CocoaPods
(подключение сторонних библиотек)
http://cocoapods.org
В консоли (Программы > Утилиты > Терминал):	
.
$ sudo gem install cocoapods	
.
.
После этого, чтобы п...
Как использовать?
• создаем файл с именем Podfile в папке
проекта	

• пишем там pod ‘Имя библиотеки’	

• после этого в конс...
Общение с сервером
HTTP - протокол передачи данных	

GET-запрос: вызов урла.
http://site.com/folder/file.php?param1=v1&param2=v2
POST-запрос: ...
Вычитка списка магазинов (GET).
http://site.com/api/shops.php.
.
Вычитка списка магазинов по категории (GET).
http://site....
Вычитка списка магазинов (GET).
http://site.com/api/shops.php.
{.
"shops": [.
{.
"title": "Пятерочка",.
"location": "50.12...
Авторизация (POST).
http://site.com/api/login.php
{.
"result" : "error",.
"error" : "Неверный пароль".
}
{.
"result" : "su...
Отправка комментария к магазину (POST).
http://site.com/api/send_comment.php
{.
"result" : "success".
}
AFNetworking
(работа с сетью)
@interface ViewController ()
.
@property (strong, nonatomic) AFHTTPSessionManager *manager;
.
@end
- (void)viewDidLoad
{
[...
NSDictionary *params = @{ @"q" : @"Moscow",
@"format" : @"json",
@"num_of_days" : @1,
@"key" : @"hnhq9j8ta97x5d9hbap7sk5q"...
NSDictionary *params = @{ @"q" : @"Moscow",
@"format" : @"json",
@"num_of_days" : @1,
@"key" : @"hnhq9j8ta97x5d9hbap7sk5q"...
Домашнее задание
• добавить работу с сервером в ваше
приложение (либо загрузка файлов, либо
загрузка картинок, либо загруз...
Всё!
Глеб Тарасов	

gleb34@gmail.com	

twitter.com/pilot34
Интуит. Разработка приложений для iOS. Лекция 7. Работа с сетью
Upcoming SlideShare
Loading in...5
×

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

703

Published on

Published in: Education
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
703
On Slideshare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
11
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

Transcript of "Интуит. Разработка приложений для 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
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×