Итак, довольно слов, переходим к сути. Далее будет рассмотрен фрагмент кода, который пытается определить, обладает ли данное устройство возможностями социального обмена контентом через 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.
Наконец, не забывайте, что обработчики завершения для ваших видов, используемых для составления таких сообщений,
См. также
Раздел 11.0.
11.12. Синтаксический разбор XML с помощью NSXMLParser
Постановка задачи
Необходимо выполнить синтаксический разбор (парсинг) фрагмента кода на языке XML или XML-документа.
Решение
Воспользуйтесь классом NSXMLParser.
Обсуждение
Для синтаксического разбора XML-содержимого класс NSXMLParser использует делегат. Создадим простой XML-файл, содержащий следующие данные (сохраните этот файл в вашем проекте как MyXML.xml):
Теперь определим свойство типа 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: