SlideShare uma empresa Scribd logo
1 de 43
Baixar para ler offline
Работа с сетью
Разработка приложений для iOS
Лекция 7
Глеб Тарасов
gleb34@gmail.com
Вспомним прошлое
занятие
Как задается в Storyboard, какой
контроллер будет показан при
старте приложения?
Как задается в Storyboard, какой
контроллер будет показан при
старте приложения?
стрелочка слева, указывающая на контроллер;
либо галка «is initial controller»
Как в коде контроллера получить
ссылку на UILabel из storyboard
Как в коде контроллера получить
ссылку на UILabel из storyboard
правой кнопкой от label в storyboard
перетаскиваем в место,
где пишут свойства, и создаем IBOutlet
Как по нажатию кнопки из
storyboard выполнить метод в
коде контроллера?
Как по нажатию кнопки из
storyboard выполнить метод в
коде контроллера?
правой кнопкой от кнопки перетаскиваем в код и
создаем IBAction
Как сделать, чтобы по нажатию на
кнопку в navigation пушился другой
контроллер?
Как сделать, чтобы по нажатию на
кнопку в navigation пушился другой
контроллер?
Добавить в Storyboard этот контроллер, а потом
правой кнопкой провести от кнопки к контроллеру и
выбрать «push»
Блоки
(лямбда выражения)
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
{
self.errorLabel.hidden = NO;
}
};
Server *s = [[Server alloc] init];
[s loadUsersWithAction:action];
Блок кода с двумя параметрами
- (void)loadUsersWithAction:(LoadBlock)action
{
NSArray *users = ...;
if (users)
{
action(YES, users);
}
else
{
action(NO, nil);
}
}
Блок как параметр метода
typedef void(^BasicBlock)();
typedef void(^StringBlock)(NSString *str);
typedef void(^LoadBlock)(BOOL success, NSArray *arr);
Объявление типов блоков
http://fuckingblocksyntax.com
Потоки
// Main thread
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
// Background thread
dispatch_async(dispatch_get_main_queue(), ^{
// Main thread
});
});
Как запустить код в фоне, а
потом обновить интерфейс
- (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;
}
});
});
}
Загрузка данных
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);
Загрузить строку по ссылке
Загрузить бинарные данные по
ссылке
JSON
{!
"firstName": "Иван",!
"lastName": "Иванов",!
"address": {!
"streetAddress": "Московское ш., 101, кв.101",!
"city": "Ленинград",!
"postalCode": 101101!
},!
"phoneNumbers": [!
"812 123-1234",!
"916 123-4567"!
]!
}
http://ru.wikipedia.org/wiki/JSON
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
NSString *json = ...;
NSData *data = [json dataUsingEncoding:NSUTF8StringEncoding];
NSArray *arr = [NSJSONSerialization JSONObjectWithData:data
options:0
error:nil];
NSLog(@"%@", arr);
Преобразовать json в массив
JSON в dropbox	

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

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

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

• после этого в консоли в этой папке
вызываем «pod install»	

• с этого момента запускаем не .xcodeproj
файл, а .xcworkspace
Общение с сервером
HTTP - протокол передачи данных	

GET-запрос: вызов урла.
http://site.com/folder/file.php?param1=v1&param2=v2
POST-запрос: вызов урла с параметрами.
http://site.com/folder/file.php.
.
param1 = v1.
param2 = v2
Вычитка списка магазинов (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
Вычитка списка магазинов (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.
}.
].
}
Авторизация (POST).
http://site.com/api/login.php
{.
"result" : "error",.
"error" : "Неверный пароль".
}
{.
"result" : "success",.
"token" : "kjhkdsfhsdofsdfsdf".
}
Отправка комментария к магазину (POST).
http://site.com/api/send_comment.php
{.
"result" : "success".
}
AFNetworking
(работа с сетью)
@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>
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-запрос
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-запрос
Домашнее задание
• добавить работу с сервером в ваше
приложение (либо загрузка файлов, либо
загрузка картинок, либо загрузка данных
через json).	

• можно просто через загрузку NSString и
NSData, можно через AFNetworking
Всё!
Глеб Тарасов	

gleb34@gmail.com	

twitter.com/pilot34

Mais conteúdo relacionado

Mais procurados

Web осень 2013 лекция 5
Web осень 2013 лекция 5Web осень 2013 лекция 5
Web осень 2013 лекция 5
Technopark
 
UWDC 2013, Как мы используем Yii
UWDC 2013, Как мы используем YiiUWDC 2013, Как мы используем Yii
UWDC 2013, Как мы используем Yii
Alexander Makarov
 
DevConf 2012 - Yii, его разработка и Yii2
DevConf 2012 - Yii, его разработка и Yii2DevConf 2012 - Yii, его разработка и Yii2
DevConf 2012 - Yii, его разработка и Yii2
Alexander Makarov
 

Mais procurados (20)

Web осень 2013 лекция 5
Web осень 2013 лекция 5Web осень 2013 лекция 5
Web осень 2013 лекция 5
 
Страх и ненависть в Event Bus
Страх и ненависть в Event BusСтрах и ненависть в Event Bus
Страх и ненависть в Event Bus
 
Олег Годовых «Страх и ненависть в Event Bus»
Олег Годовых «Страх и ненависть в Event Bus»Олег Годовых «Страх и ненависть в Event Bus»
Олег Годовых «Страх и ненависть в Event Bus»
 
UWDC 2013, Как мы используем Yii
UWDC 2013, Как мы используем YiiUWDC 2013, Как мы используем Yii
UWDC 2013, Как мы используем Yii
 
Почему Mojolicious?
Почему Mojolicious?Почему Mojolicious?
Почему Mojolicious?
 
UWDC 2013, Yii2
UWDC 2013, Yii2UWDC 2013, Yii2
UWDC 2013, Yii2
 
Устройство фреймворка symfony 2 (http://frontend-dev.ru)
Устройство фреймворка symfony 2 (http://frontend-dev.ru)Устройство фреймворка symfony 2 (http://frontend-dev.ru)
Устройство фреймворка symfony 2 (http://frontend-dev.ru)
 
DevConf 2012 - Yii, его разработка и Yii2
DevConf 2012 - Yii, его разработка и Yii2DevConf 2012 - Yii, его разработка и Yii2
DevConf 2012 - Yii, его разработка и Yii2
 
Gennady kovshenin-wcrus2015-2
Gennady kovshenin-wcrus2015-2Gennady kovshenin-wcrus2015-2
Gennady kovshenin-wcrus2015-2
 
Sphinx
SphinxSphinx
Sphinx
 
Authentication security
Authentication securityAuthentication security
Authentication security
 
Пластилиновый код: как перестать кодить и начать жить
Пластилиновый код: как перестать кодить и начать житьПластилиновый код: как перестать кодить и начать жить
Пластилиновый код: как перестать кодить и начать жить
 
Отладка и профилирование JavaScript/Ajax
Отладка и профилирование JavaScript/AjaxОтладка и профилирование JavaScript/Ajax
Отладка и профилирование JavaScript/Ajax
 
Yeoman generator своими руками
Yeoman generator своими рукамиYeoman generator своими руками
Yeoman generator своими руками
 
Sphinx
SphinxSphinx
Sphinx
 
SPA инструменты
SPA инструментыSPA инструменты
SPA инструменты
 
Суперсилы Chrome developer tools
Суперсилы Chrome developer toolsСуперсилы Chrome developer tools
Суперсилы Chrome developer tools
 
Дмитрий Щадей "Зачем и как мы используем jsLint"
Дмитрий Щадей "Зачем и как мы используем jsLint"Дмитрий Щадей "Зачем и как мы используем jsLint"
Дмитрий Щадей "Зачем и как мы используем jsLint"
 
Ruby - или зачем мне еще один язык программирования?
Ruby - или зачем мне еще один язык программирования?Ruby - или зачем мне еще один язык программирования?
Ruby - или зачем мне еще один язык программирования?
 
Perl in practice
Perl in practicePerl in practice
Perl in practice
 

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

Школа-Студия разработки приложений для iOS. 5 лекция. Разное
Школа-Студия разработки приложений для iOS. 5 лекция. РазноеШкола-Студия разработки приложений для iOS. 5 лекция. Разное
Школа-Студия разработки приложений для iOS. 5 лекция. Разное
Глеб Тарасов
 
Mobile automation uamobile
Mobile automation uamobileMobile automation uamobile
Mobile automation uamobile
UA Mobile
 
Django South. Миграция баз данных.
Django South. Миграция баз данных.  Django South. Миграция баз данных.
Django South. Миграция баз данных.
MoscowDjango
 
kranonitS20 Сергей Бурма. Django - легко, быстро, эффективно
kranonitS20 Сергей Бурма. Django - легко, быстро, эффективноkranonitS20 Сергей Бурма. Django - легко, быстро, эффективно
kranonitS20 Сергей Бурма. Django - легко, быстро, эффективно
Krivoy Rog IT Community
 
Web осень 2013 лекция 8
Web осень 2013 лекция 8Web осень 2013 лекция 8
Web осень 2013 лекция 8
Technopark
 
PHP Tricks
PHP TricksPHP Tricks
PHP Tricks
BlackFan
 
Moscow Python Conf 2016. Почему 100% покрытие это плохо?
Moscow Python Conf 2016. Почему 100% покрытие это плохо?Moscow Python Conf 2016. Почему 100% покрытие это плохо?
Moscow Python Conf 2016. Почему 100% покрытие это плохо?
Ivan Tsyganov
 

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

C# Web. Занятие 11.
C# Web. Занятие 11.C# Web. Занятие 11.
C# Web. Занятие 11.
 
Школа-Студия разработки приложений для iOS. 5 лекция. Разное
Школа-Студия разработки приложений для iOS. 5 лекция. РазноеШкола-Студия разработки приложений для iOS. 5 лекция. Разное
Школа-Студия разработки приложений для iOS. 5 лекция. Разное
 
Инструментируй это
Инструментируй этоИнструментируй это
Инструментируй это
 
Mojolicious
MojoliciousMojolicious
Mojolicious
 
WebCamp: Developer Day: Parse'им бэкенд - Аким Халилов
WebCamp: Developer Day: Parse'им бэкенд - Аким ХалиловWebCamp: Developer Day: Parse'им бэкенд - Аким Халилов
WebCamp: Developer Day: Parse'им бэкенд - Аким Халилов
 
Mobile automation uamobile
Mobile automation uamobileMobile automation uamobile
Mobile automation uamobile
 
Django South. Миграция баз данных.
Django South. Миграция баз данных.  Django South. Миграция баз данных.
Django South. Миграция баз данных.
 
iOS and Android Mobile Test Automation
iOS and Android Mobile Test AutomationiOS and Android Mobile Test Automation
iOS and Android Mobile Test Automation
 
kranonitS20 Сергей Бурма. Django - легко, быстро, эффективно
kranonitS20 Сергей Бурма. Django - легко, быстро, эффективноkranonitS20 Сергей Бурма. Django - легко, быстро, эффективно
kranonitS20 Сергей Бурма. Django - легко, быстро, эффективно
 
Методики «Inversion of Control» и «Dependency Injection». Применение в Spring.
Методики «Inversion of Control» и «Dependency Injection». Применение в Spring.Методики «Inversion of Control» и «Dependency Injection». Применение в Spring.
Методики «Inversion of Control» и «Dependency Injection». Применение в Spring.
 
'The best practices' by KONSTANTIN KULAKSYZ at OdessaJS'2020
'The best practices' by KONSTANTIN KULAKSYZ at OdessaJS'2020'The best practices' by KONSTANTIN KULAKSYZ at OdessaJS'2020
'The best practices' by KONSTANTIN KULAKSYZ at OdessaJS'2020
 
Web осень 2013 лекция 8
Web осень 2013 лекция 8Web осень 2013 лекция 8
Web осень 2013 лекция 8
 
Превышаем скоростные лимиты с Angular 2 / Алексей Охрименко (IPONWEB)
Превышаем скоростные лимиты с Angular 2 / Алексей Охрименко (IPONWEB)Превышаем скоростные лимиты с Angular 2 / Алексей Охрименко (IPONWEB)
Превышаем скоростные лимиты с Angular 2 / Алексей Охрименко (IPONWEB)
 
Превышаем скоростные лимиты с Angular 2
Превышаем скоростные лимиты с Angular 2Превышаем скоростные лимиты с Angular 2
Превышаем скоростные лимиты с Angular 2
 
PHP Tricks
PHP TricksPHP Tricks
PHP Tricks
 
Erlang tasty & useful stuff
Erlang tasty & useful stuffErlang tasty & useful stuff
Erlang tasty & useful stuff
 
Где кончается react native? / Павел Кондратенко (Rambler&Co)
Где кончается react native? / Павел Кондратенко (Rambler&Co)Где кончается react native? / Павел Кондратенко (Rambler&Co)
Где кончается react native? / Павел Кондратенко (Rambler&Co)
 
Moscow Python Conf 2016. Почему 100% покрытие это плохо?
Moscow Python Conf 2016. Почему 100% покрытие это плохо?Moscow Python Conf 2016. Почему 100% покрытие это плохо?
Moscow Python Conf 2016. Почему 100% покрытие это плохо?
 
Top 10 problems supporting Magento customers
Top 10 problems supporting Magento customersTop 10 problems supporting Magento customers
Top 10 problems supporting Magento customers
 
Автоматизация UI тестирования под Windows и Windows Phone
Автоматизация UI тестирования под Windows и Windows PhoneАвтоматизация UI тестирования под Windows и Windows Phone
Автоматизация UI тестирования под Windows и Windows Phone
 

Mais de Глеб Тарасов

Интуит. Разработка приложений для iOS. Лекция 11. Расширенные возможности уст...
Интуит. Разработка приложений для iOS. Лекция 11. Расширенные возможности уст...Интуит. Разработка приложений для iOS. Лекция 11. Расширенные возможности уст...
Интуит. Разработка приложений для iOS. Лекция 11. Расширенные возможности уст...
Глеб Тарасов
 
Интуит. Разработка приложений для iOS. Лекция 10. Поддержка iPad
Интуит. Разработка приложений для iOS. Лекция 10. Поддержка iPadИнтуит. Разработка приложений для iOS. Лекция 10. Поддержка iPad
Интуит. Разработка приложений для iOS. Лекция 10. Поддержка iPad
Глеб Тарасов
 
Интуит. Разработка приложений для iOS. Лекция 9. Нестандартный интерфейс
Интуит. Разработка приложений для iOS. Лекция 9. Нестандартный интерфейсИнтуит. Разработка приложений для iOS. Лекция 9. Нестандартный интерфейс
Интуит. Разработка приложений для iOS. Лекция 9. Нестандартный интерфейс
Глеб Тарасов
 
Интуит. Разработка приложений для iOS. Лекция 8. Работа с данными
Интуит. Разработка приложений для iOS. Лекция 8. Работа с даннымиИнтуит. Разработка приложений для iOS. Лекция 8. Работа с данными
Интуит. Разработка приложений для iOS. Лекция 8. Работа с данными
Глеб Тарасов
 
Интуит. Разработка приложений для iOS. Лекция 5. Сложные Views
Интуит. Разработка приложений для iOS. Лекция 5. Сложные ViewsИнтуит. Разработка приложений для iOS. Лекция 5. Сложные Views
Интуит. Разработка приложений для iOS. Лекция 5. Сложные Views
Глеб Тарасов
 
Интуит. Разработка приложений для iOS. Лекция 4. Controllers
Интуит. Разработка приложений для iOS. Лекция 4. ControllersИнтуит. Разработка приложений для iOS. Лекция 4. Controllers
Интуит. Разработка приложений для iOS. Лекция 4. Controllers
Глеб Тарасов
 
Интуит. Разработка приложений для iOS. Лекция 3. Views
Интуит. Разработка приложений для iOS. Лекция 3. ViewsИнтуит. Разработка приложений для iOS. Лекция 3. Views
Интуит. Разработка приложений для iOS. Лекция 3. Views
Глеб Тарасов
 
Интуит. Разработка приложений для iOS. Лекция 2. Objective-C
Интуит. Разработка приложений для iOS. Лекция 2. Objective-CИнтуит. Разработка приложений для iOS. Лекция 2. Objective-C
Интуит. Разработка приложений для iOS. Лекция 2. Objective-C
Глеб Тарасов
 
Интуит. Разработка приложений для iOS. Лекция 1. Знакомство.
Интуит. Разработка приложений для iOS. Лекция 1. Знакомство.Интуит. Разработка приложений для iOS. Лекция 1. Знакомство.
Интуит. Разработка приложений для iOS. Лекция 1. Знакомство.
Глеб Тарасов
 
Презентация проекта Ulect
Презентация проекта Ulect Презентация проекта Ulect
Презентация проекта Ulect
Глеб Тарасов
 
Школа-студия разработки для iOS. Лекция 4. Работа с данными
Школа-студия разработки для iOS. Лекция 4. Работа с даннымиШкола-студия разработки для iOS. Лекция 4. Работа с данными
Школа-студия разработки для iOS. Лекция 4. Работа с данными
Глеб Тарасов
 
Школа-Студия разработки приложений для iOS. 3 лекция. Интерфейсы, прололжение
Школа-Студия разработки приложений для iOS. 3 лекция. Интерфейсы, прололжениеШкола-Студия разработки приложений для iOS. 3 лекция. Интерфейсы, прололжение
Школа-Студия разработки приложений для iOS. 3 лекция. Интерфейсы, прололжение
Глеб Тарасов
 
Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers
Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, ControllersШкола-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers
Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers
Глеб Тарасов
 
Школа-студия разработки приложений для iOS. Лекция 1. Objective-C
Школа-студия разработки приложений для iOS. Лекция 1. Objective-CШкола-студия разработки приложений для iOS. Лекция 1. Objective-C
Школа-студия разработки приложений для iOS. Лекция 1. Objective-C
Глеб Тарасов
 

Mais de Глеб Тарасов (20)

Gleb Tarasov. Portfolio
Gleb Tarasov. PortfolioGleb Tarasov. Portfolio
Gleb Tarasov. Portfolio
 
Интуит. Разработка приложений для iOS. Лекция 11. Расширенные возможности уст...
Интуит. Разработка приложений для iOS. Лекция 11. Расширенные возможности уст...Интуит. Разработка приложений для iOS. Лекция 11. Расширенные возможности уст...
Интуит. Разработка приложений для iOS. Лекция 11. Расширенные возможности уст...
 
Интуит. Разработка приложений для iOS. Лекция 10. Поддержка iPad
Интуит. Разработка приложений для iOS. Лекция 10. Поддержка iPadИнтуит. Разработка приложений для iOS. Лекция 10. Поддержка iPad
Интуит. Разработка приложений для iOS. Лекция 10. Поддержка iPad
 
Интуит. Разработка приложений для iOS. Лекция 9. Нестандартный интерфейс
Интуит. Разработка приложений для iOS. Лекция 9. Нестандартный интерфейсИнтуит. Разработка приложений для iOS. Лекция 9. Нестандартный интерфейс
Интуит. Разработка приложений для iOS. Лекция 9. Нестандартный интерфейс
 
Интуит. Разработка приложений для iOS. Лекция 8. Работа с данными
Интуит. Разработка приложений для iOS. Лекция 8. Работа с даннымиИнтуит. Разработка приложений для iOS. Лекция 8. Работа с данными
Интуит. Разработка приложений для iOS. Лекция 8. Работа с данными
 
Интуит. Разработка приложений для iOS. Лекция 5. Сложные Views
Интуит. Разработка приложений для iOS. Лекция 5. Сложные ViewsИнтуит. Разработка приложений для iOS. Лекция 5. Сложные Views
Интуит. Разработка приложений для iOS. Лекция 5. Сложные Views
 
Интуит. Разработка приложений для iOS. Лекция 4. Controllers
Интуит. Разработка приложений для iOS. Лекция 4. ControllersИнтуит. Разработка приложений для iOS. Лекция 4. Controllers
Интуит. Разработка приложений для iOS. Лекция 4. Controllers
 
Интуит. Разработка приложений для iOS. Лекция 3. Views
Интуит. Разработка приложений для iOS. Лекция 3. ViewsИнтуит. Разработка приложений для iOS. Лекция 3. Views
Интуит. Разработка приложений для iOS. Лекция 3. Views
 
Интуит. Разработка приложений для iOS. Лекция 2. Objective-C
Интуит. Разработка приложений для iOS. Лекция 2. Objective-CИнтуит. Разработка приложений для iOS. Лекция 2. Objective-C
Интуит. Разработка приложений для iOS. Лекция 2. Objective-C
 
Интуит. Разработка приложений для iOS. Лекция 1. Знакомство.
Интуит. Разработка приложений для iOS. Лекция 1. Знакомство.Интуит. Разработка приложений для iOS. Лекция 1. Знакомство.
Интуит. Разработка приложений для iOS. Лекция 1. Знакомство.
 
Презентация проекта Ulect
Презентация проекта Ulect Презентация проекта Ulect
Презентация проекта Ulect
 
Презентация для Foundation Institute
Презентация для Foundation InstituteПрезентация для Foundation Institute
Презентация для Foundation Institute
 
Делаем жизнь лучше с CocoaPods
Делаем жизнь лучше с CocoaPodsДелаем жизнь лучше с CocoaPods
Делаем жизнь лучше с CocoaPods
 
msumobi2. Лекция 2
msumobi2. Лекция 2msumobi2. Лекция 2
msumobi2. Лекция 2
 
msumobi2. Лекция 1
msumobi2. Лекция 1msumobi2. Лекция 1
msumobi2. Лекция 1
 
Школа-студия разработки для iOS. Лекция 4. Работа с данными
Школа-студия разработки для iOS. Лекция 4. Работа с даннымиШкола-студия разработки для iOS. Лекция 4. Работа с данными
Школа-студия разработки для iOS. Лекция 4. Работа с данными
 
Школа-Студия разработки приложений для iOS. 3 лекция. Интерфейсы, прололжение
Школа-Студия разработки приложений для iOS. 3 лекция. Интерфейсы, прололжениеШкола-Студия разработки приложений для iOS. 3 лекция. Интерфейсы, прололжение
Школа-Студия разработки приложений для iOS. 3 лекция. Интерфейсы, прололжение
 
Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers
Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, ControllersШкола-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers
Школа-студия разработки приложений для iOS. 2 лекция. MVC, View, Controllers
 
Школа-студия разработки приложений для iOS. Лекция 1. Objective-C
Школа-студия разработки приложений для iOS. Лекция 1. Objective-CШкола-студия разработки приложений для iOS. Лекция 1. Objective-C
Школа-студия разработки приложений для iOS. Лекция 1. Objective-C
 
ShareKit. Evernote Dev Meetup
ShareKit. Evernote Dev MeetupShareKit. Evernote Dev Meetup
ShareKit. Evernote Dev Meetup
 

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

  • 1. Работа с сетью Разработка приложений для iOS Лекция 7 Глеб Тарасов gleb34@gmail.com
  • 3. Как задается в Storyboard, какой контроллер будет показан при старте приложения?
  • 4. Как задается в Storyboard, какой контроллер будет показан при старте приложения? стрелочка слева, указывающая на контроллер; либо галка «is initial controller»
  • 5. Как в коде контроллера получить ссылку на UILabel из storyboard
  • 6. Как в коде контроллера получить ссылку на UILabel из storyboard правой кнопкой от label в storyboard перетаскиваем в место, где пишут свойства, и создаем IBOutlet
  • 7. Как по нажатию кнопки из storyboard выполнить метод в коде контроллера?
  • 8. Как по нажатию кнопки из storyboard выполнить метод в коде контроллера? правой кнопкой от кнопки перетаскиваем в код и создаем IBAction
  • 9. Как сделать, чтобы по нажатию на кнопку в navigation пушился другой контроллер?
  • 10. Как сделать, чтобы по нажатию на кнопку в navigation пушился другой контроллер? Добавить в Storyboard этот контроллер, а потом правой кнопкой провести от кнопки к контроллеру и выбрать «push»
  • 12. BasicBlock action = ^{ NSLog(@"Hello, world!"); }; action(); Блок кода без параметров
  • 13. StringBlock action = ^(NSString *str) { NSLog(@"Hello, %@", str); }; action(@"world!"); Блок кода с параметром - строка
  • 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. - (void)loadUsersWithAction:(LoadBlock)action { NSArray *users = ...; if (users) { action(YES, users); } else { action(NO, nil); } } Блок как параметр метода
  • 16. typedef void(^BasicBlock)(); typedef void(^StringBlock)(NSString *str); typedef void(^LoadBlock)(BOOL success, NSArray *arr); Объявление типов блоков
  • 19.
  • 20. // Main thread dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ // Background thread dispatch_async(dispatch_get_main_queue(), ^{ // Main thread }); }); Как запустить код в фоне, а потом обновить интерфейс
  • 21. - (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; } }); }); }
  • 23. 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); Загрузить строку по ссылке Загрузить бинарные данные по ссылке
  • 24. JSON
  • 25. {! "firstName": "Иван",! "lastName": "Иванов",! "address": {! "streetAddress": "Московское ш., 101, кв.101",! "city": "Ленинград",! "postalCode": 101101! },! "phoneNumbers": [! "812 123-1234",! "916 123-4567"! ]! } http://ru.wikipedia.org/wiki/JSON
  • 26. 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
  • 27. NSString *json = ...; NSData *data = [json dataUsingEncoding:NSUTF8StringEncoding]; NSArray *arr = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil]; NSLog(@"%@", arr); Преобразовать json в массив
  • 28. JSON в dropbox для тренировки • поделиться ссылкой в dropbox • поменять в ссылке www на dl
  • 30. http://cocoapods.org В консоли (Программы > Утилиты > Терминал): . $ sudo gem install cocoapods . . После этого, чтобы проверить: . $ pod search AFNetworking Установка Если выдаст ошибку, то сначала «sudo gem install rake» и нажать «Y», когда спросит, 6 а потом «sudo gem install cocoapods»
  • 31. Как использовать? • создаем файл с именем Podfile в папке проекта • пишем там pod ‘Имя библиотеки’ • после этого в консоли в этой папке вызываем «pod install» • с этого момента запускаем не .xcodeproj файл, а .xcworkspace
  • 33. HTTP - протокол передачи данных GET-запрос: вызов урла. http://site.com/folder/file.php?param1=v1&param2=v2 POST-запрос: вызов урла с параметрами. http://site.com/folder/file.php. . param1 = v1. param2 = v2
  • 34. Вычитка списка магазинов (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
  • 35. Вычитка списка магазинов (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. }. ]. }
  • 36. Авторизация (POST). http://site.com/api/login.php {. "result" : "error",. "error" : "Неверный пароль". } {. "result" : "success",. "token" : "kjhkdsfhsdofsdfsdf". }
  • 37. Отправка комментария к магазину (POST). http://site.com/api/send_comment.php {. "result" : "success". }
  • 39. @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>
  • 40. 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-запрос
  • 41. 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-запрос
  • 42. Домашнее задание • добавить работу с сервером в ваше приложение (либо загрузка файлов, либо загрузка картинок, либо загрузка данных через json). • можно просто через загрузку NSString и NSData, можно через AFNetworking