Читаем iOS. Приемы программирования полностью

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

См. также

Раздел 11.0.

11.12. Синтаксический разбор XML с помощью NSXMLParser

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

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

Решение

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

Обсуждение

Для синтаксического разбора 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:

Перейти на страницу:
Нет соединения с сервером, попробуйте зайти чуть позже