Kniga-Online.club
» » » » Вандад Нахавандипур - iOS. Приемы программирования

Вандад Нахавандипур - iOS. Приемы программирования

Читать бесплатно Вандад Нахавандипур - iOS. Приемы программирования. Жанр: Программирование издательство -, год 2004. Так же читаем полные версии (весь текст) онлайн без регистрации и SMS на сайте kniga-online.club или прочесть краткое содержание, предисловие (аннотацию), описание и ознакомиться с отзывами (комментариями) о произведении.
Перейти на страницу:

/* Сейчас попытаемся сериализовать объект JSON в словарь. */

error = nil;

id jsonObject = [NSJSONSerialization

JSONObjectWithData: jsonData

options: NSJSONReadingAllowFragments

error:&error];

if (jsonObject!= nil &&

error == nil){

NSLog(@"Successfully deserialized…");

if ([jsonObject isKindOfClass: [NSDictionary class]]){

NSDictionary *deserializedDictionary = (NSDictionary *)jsonObject;

NSLog(@"Deserialized JSON Dictionary = %@", deserializedDictionary);

}

else if ([jsonObject isKindOfClass: [NSArray class]]){

NSArray *deserializedArray = (NSArray *)jsonObject;

NSLog(@"Deserialized JSON Array = %@", deserializedArray);

}

else {

/* Был возвращен какой-то другой объект. Мы не знаем,

что делать в этой ситуации, так как десериализатор

возвращает только словари или массивы. */

}

}

else if (error!= nil){

NSLog(@"An error happened while deserializing the JSON data.");

}

Если теперь объединить этот код с кодом из раздела 8.9, то можно будет сначала сериализовать словарь в объект JSON, десериализовать объект JSON обратно в словарь, а потом вывести результаты на консоль, чтобы убедиться, что все работает нормально:

— (BOOL) application:(UIApplication *)application

didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{

NSDictionary *dictionary =

@{

@"First Name": @"Anthony",

@"Last Name": @"Robbins",

@"Age": @51,

@"Children": @[

@"Anthony's Son 1",

@"Anthony's Daughter 1",

@"Anthony's Son 2",

@"Anthony's Son 3",

@"Anthony's Daughter 2",

],

};

NSError *error = nil;

NSData *jsonData = [NSJSONSerialization

dataWithJSONObject: dictionary

options: NSJSONWritingPrettyPrinted

error:&error];

if ([jsonData length] > 0 &&

error == nil){

NSLog(@"Successfully serialized the dictionary into data.");

/* Сейчас попытаемся сериализовать объект JSON в словарь. */

error = nil;

id jsonObject = [NSJSONSerialization

JSONObjectWithData: jsonData

options: NSJSONReadingAllowFragments

error:&error];

if (jsonObject!= nil &&

error == nil){

NSLog(@"Successfully deserialized…");

if ([jsonObject isKindOfClass: [NSDictionary class]]){

NSDictionary *deserializedDictionary = (NSDictionary *)jsonObject;

NSLog(@"Deserialized JSON Dictionary = %@", deserializedDictionary);

}

else if ([jsonObject isKindOfClass: [NSArray class]]){

NSArray *deserializedArray = (NSArray *)jsonObject;

NSLog(@"Deserialized JSON Array = %@", deserializedArray);

}

else {

/* Был возвращен какой-то другой объект. Мы не знаем, что делать

в этой ситуации, так как десериализатор возвращает только словари

или массивы. */

}

}

else if (error!= nil){

NSLog(@"An error happened while deserializing the JSON data.");

}

}

else if ([jsonData length] == 0 &&

error == nil){

NSLog(@"No data was returned after serialization.");

}

else if (error!= nil){

NSLog(@"An error happened = %@", error);

}

self.window = [[UIWindow alloc] initWithFrame:

[[UIScreen mainScreen] bounds]];

// Точка переопределения для дополнительной настройки после запуска приложения

self.window.backgroundColor = [UIColor whiteColor];

[self.window makeKeyAndVisible];

return YES;

}

Параметр options метода JSONObjectWithData: options: error: принимает одно или несколько следующих значений:

• NSJSONReadingMutableContainers — словарь или массив, возвращенный методом JSONObjectWithData: options: error:, будет изменяемым. Иными словами, этот метод будет возвращать либо экземпляр NSMutableArray, либо экземпляр NSMutableDictionary в противоположность изменяемому массиву или словарю;

• NSJSONReadingMutableLeaves — листовые значения будут инкапсулированы в экземпляры NSMutableString;

• NSJSONReadingAllowFragments — обеспечивает десериализацию данных JSON, чей корневой объект верхнего уровня не является массивом или словарем.

См. также

Раздел 11.9.

11.11. Включение в приложения функций социального обмена контентом

Постановка задачи

Требуется предоставить в приложении функции социального обмена контентом. Например, у пользователя мобильного устройства должна быть возможность написать твит или обновить статус в Facebook.

Решение

Внедрите в ваше приложение фреймворк Social и воспользуйтесь классом SLComposeViewController для обеспечения социального обмена сообщениями, например твитами.

Обсуждение

Класс SLComposeViewController входит в состав фреймворка Social. Он приспособлен к работе с модулями компилятора LLVM. Чтобы приступить к использованию этого фреймворка, вам всего лишь потребуется импортировать в проект обобщающий заголовок, вот так:

#import «ViewController.h»

#import <Social/Social.h>

@implementation ViewController

Поскольку Apple обогащает свой SDK новыми возможностями социального обмена контентом, вы можете запрашивать фреймворк Social и прямо во время выполнения узнавать, какой из сервисов доступен на устройстве, на котором работает ваше приложение. Поскольку набор таких сервисов может варьироваться от устройства к устройству, перед попыткой использовать тот или иной сервис обязательно следует убедиться, что нужный сервис работает. Чтобы запросить у iOS такую информацию, воспользуйтесь методом класса isAvailableForServiceType:, относящимся к классу SLComposeViewController. Параметр, передаваемый этому методу, относится к типу NSString, а вот список некоторых валидных параметров, которые можно передать этому методу:

• SOCIAL_EXTERN NSString *const SLServiceTypeTwitter;

• SOCIAL_EXTERN NSString *const SLServiceTypeFacebook;

• SOCIAL_EXTERN NSString *const SLServiceTypeSinaWeibo;

• SOCIAL_EXTERN NSString *const SLServiceTypeTencentWeibo;

• SOCIAL_EXTERN NSString *const SLServiceTypeLinkedIn.

Убедившись, что нужный сервис доступен, вы можете воспользоваться методом класса composeViewControllerForServiceType:, относящимся к классу SLComposeViewController. Так вы получаете новый экземпляр контроллера вида для социального обмена. Далее все совсем просто. Вам потребуется всего лишь использовать в контроллере для социального обмена один или несколько следующих методов:

• setInitialText: — задает строку, которой вы хотите поделиться;

• addImage: — добавляет изображение, которое должно прикрепляться к вашему посту;

• addURL: — добавляет URL, которым можно делиться наряду с текстом и изображением.

Экземпляр класса SLComposeViewController также обладает очень удобным свойством completionHandler. Оно представляет собой блоковый объект типа SLComposeViewControllerCompletionHandler. Этот обработчик завершения будет вызываться всякий раз, когда пользователь успешно завершает процесс обмена контентом (то есть пользователь успешно отправляет пост, который iOS доставляет на сайт Twitter, Facebook и др.) либо закрывает диалоговое окно. Этому методу будет передаваться параметр типа SLComposeViewControllerResult. Он обозначает тип произошедшего события — например, успех или отмену операции.

Итак, довольно слов, переходим к сути. Далее будет рассмотрен фрагмент кода, который пытается определить, обладает ли данное устройство возможностями социального обмена контентом через Twitter. Если это так, код создает простой твит с картинкой и URL, после чего отображает для пользователя диалоговое окно Twitter, готовое к отправке сообщения:

— (void) viewDidAppear:(BOOL)animated{

[super viewDidAppear: animated];

if ([SLComposeViewController

isAvailableForServiceType: SLServiceTypeTwitter]){

SLComposeViewController *controller =

[SLComposeViewController

composeViewControllerForServiceType: SLServiceTypeTwitter];

[controller setInitialText:@"MacBook Airs are amazingly thin!"];

[controller addImage: [UIImage imageNamed:@"MacBookAir"]];

[controller addURL: [NSURL URLWithString:@"http://www.apple.com/"]];

controller.completionHandler = ^(SLComposeViewControllerResult result){

NSLog(@"Completed");

};

[self presentViewController: controller animated: YES completion: nil];

} else {

NSLog(@"The twitter service is not available");

}

}

Запустив это приложение на устройстве, где поддерживается работа с Twitter (такая интеграция обеспечивается с помощью соответствующих настроек iOS), вы увидите картинку, напоминающую рис. 11.2.

Рис. 11.2. Создание простого твита с помощью фреймворка Social

Обладая этой информацией, мы можем создавать и разные другие сообщения — например, обновления для учетной записи Facebook. На самом деле, как объяснялось ранее, вам всего лишь потребуется определить во время исполнения, активизирован ли на устройстве искомый сервис, а потом попытаться воспользоваться им — добавить в запросе текст, изображения, URL.

Перейти на страницу:

Вандад Нахавандипур читать все книги автора по порядку

Вандад Нахавандипур - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки kniga-online.club.


iOS. Приемы программирования отзывы

Отзывы читателей о книге iOS. Приемы программирования, автор: Вандад Нахавандипур. Читайте комментарии и мнения людей о произведении.


Уважаемые читатели и просто посетители нашей библиотеки! Просим Вас придерживаться определенных правил при комментировании литературных произведений.

  • 1. Просьба отказаться от дискриминационных высказываний. Мы защищаем право наших читателей свободно выражать свою точку зрения. Вместе с тем мы не терпим агрессии. На сайте запрещено оставлять комментарий, который содержит унизительные высказывания или призывы к насилию по отношению к отдельным лицам или группам людей на основании их расы, этнического происхождения, вероисповедания, недееспособности, пола, возраста, статуса ветерана, касты или сексуальной ориентации.
  • 2. Просьба отказаться от оскорблений, угроз и запугиваний.
  • 3. Просьба отказаться от нецензурной лексики.
  • 4. Просьба вести себя максимально корректно как по отношению к авторам, так и по отношению к другим читателям и их комментариям.

Надеемся на Ваше понимание и благоразумие. С уважением, администратор kniga-online.


Прокомментировать
Подтвердите что вы не робот:*
Подтвердите что вы не робот:*