Итак, довольно слов, переходим к сути. Далее будет рассмотрен фрагмент кода, который пытается определить, обладает ли данное устройство возможностями социального обмена контентом через 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.

Наконец, не забывайте, что обработчики завершения для ваших видов, используемых для составления таких сообщений, могут вызываться не в том потоке, в котором вы создавали контроллер. Итак, помня об этом, пользуйтесь приемами, изученными в главе 7, и переключайтесь на работу с главным потоком внутри обработчика завершения, если собираетесь выполнять что-либо, имеющее отношение к пользовательскому интерфейсу.

<p>См. также</p>

Раздел 11.0.

<p>11.12. Синтаксический разбор XML с помощью NSXMLParser</p><p>Постановка задачи</p>

Необходимо выполнить синтаксический разбор (парсинг) фрагмента кода на языке XML или XML-документа.

<p>Решение</p>

Воспользуйтесь классом NSXMLParser.

<p>Обсуждение</p>

Для синтаксического разбора XML-содержимого класс NSXMLParser использует делегат. Создадим простой XML-файл, содержащий следующие данные (сохраните этот файл в вашем проекте как MyXML.xml):

Anthony

Robbins

51

Richard

Branson

61

Теперь определим свойство типа NSXMLParser:

#import «AppDelegate.h»

@interface AppDelegate () 

@property (nonatomic, strong) NSXMLParser *xmlParser;

@end

@implementation AppDelegate

Кроме того, как видите, я определил делегат моего приложения как делегат XML-парсера, который подчиняется протоколу NSXMLParserDelegate. Согласно этому протоколу, объект делегата XML-парсера должен относиться к типу NSXMLParser. Cчитаем с диска файл MyXML.xml и передадим его на обработку в XML-парсер:

— (BOOL) application:(UIApplication *)application

didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{

NSString *xmlFilePath = [[NSBundle mainBundle] pathForResource:@"MyXML"

ofType:@"xml"];

NSData *xml = [[NSData alloc] initWithContentsOfFile: xmlFilePath];

self.xmlParser = [[NSXMLParser alloc] initWithData: xml];

self.xmlParser.delegate = self;

if ([self.xmlParser parse]){

NSLog(@"The XML is parsed.");

} else{

NSLog(@"Failed to parse the XML");

}

self.window = [[UIWindow alloc] initWithFrame:

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

Все книги серии Бестселлеры O'Reilly

Похожие книги