Расшифруйте элемент «Тип картона Apple Web Archive» на UIPasteboard - PullRequest
3 голосов
/ 06 февраля 2012

Я копирую веб-страницу и хотел бы посмотреть, как составляется словарь, скопированный в UIPasteBoard.В настоящее время я регистрирую элемент на общем картоне следующим образом:

UIPasteboard *pasteboard = [UIPasteboard generalPasteboard];

for (NSDictionary *dict in pasteboard.items) {

    NSLog(@"Dict: %@", dict);
}

Вывод:

Dict: {
    "Apple Web Archive pasteboard type" = <62706c69 73743030 d2010203 0d5f100f 57656253 75627265 736f7572 6365735f 100f5765 624d6169 6e526573 6f757263 65a104d4 05060708 090a0b0c 5e576562 5265736f 75726365 55524c5f 100f5765.............

Я попытался получить строку для клавиши "Тип картона Apple Web Archive"следующим образом, но безуспешно:

NSString *string = [[NSString alloc] initWithData:[dict objectForKey:@""Apple Web Archive pasteboard type""] encoding:NSUTF8StringEncoding];

NSLog(@"item %@", string);

Как мне расшифровать данные для этого ключа, пожалуйста?

Ответы [ 4 ]

4 голосов
/ 31 января 2013

Тип картона Apple Web Archive - Plist, для обнаружения ключей - открыть с помощью редактора Plist.Также короткий фрагмент кода ниже (получение информации об изображениях с вставленной веб-страницы)

if ([[[UIPasteboard generalPasteboard] pasteboardTypes] containsObject:WEB_ARCHIVE]) {
    NSData* archiveData = [[UIPasteboard generalPasteboard] valueForPasteboardType:WEB_ARCHIVE];
    if (archiveData)
    {
        NSError* error = nil;
        id webArchive = [NSPropertyListSerialization propertyListWithData:archiveData options:NSPropertyListImmutable format:NULL error:&error];
        if (error) {
            return;
        }
        NSArray *subItems = [NSArray arrayWithArray:[webArchive objectForKey:@"WebSubresources"]];
        NSPredicate *iPredicate = [NSPredicate predicateWithFormat:@"WebResourceMIMEType like 'image*'"];
        NSArray *imagesArray = [subItems filteredArrayUsingPredicate:iPredicate];
        for (int i=0; i<[imagesArray count]; i++) {
            NSDictionary *sItem = [NSDictionary dictionaryWithDictionary:[imagesArray objectAtIndex:i]];
            UIImage *sImage = [UIImage imageWithData:[sItem valueForKey:@"WebResourceData"]];
            // handle images
        }
    }

}
1 голос
/ 29 января 2015

Для справки, существует сторонняя автономная библиотека для доступа к WebArchives на iOS: http://www.cocoanetics.com/2011/09/decoding-safaris-pasteboard-format/ https://github.com/Cocoanetics/DTWebArchive

0 голосов
/ 06 февраля 2012

Ознакомьтесь с документацией по WebKit здесь: Справочник по классам WebArchive

Имейте в виду, что это «закрытый» класс на iOS.Отправка сообщений этому объекту или иное взаимодействие с ним может стать основанием для отклонения вашего приложения при рассмотрении.

0 голосов
/ 06 февраля 2012

Вы можете попробовать это:

NSData *data = (NSData *) [dict objectForKey:[[dict allKeys] objectAtIndex:0]];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...