при чтении метаданных с изображения на iPhone - PullRequest
1 голос
/ 03 июля 2011

Я читаю изображение из библиотеки фотографий и получаю метаданные, используя библиотеку ресурсов. Затем я пытаюсь прочитать exif-тег комментария пользователя и отобразить его в моем текстовом представлении. Код здесь:

 [assetLibrary assetForURL:assestURL resultBlock:^(ALAsset *asset) {
        ALAssetRepresentation *representation = [asset defaultRepresentation];
        NSMutableDictionary *metadataDictPhoto = (NSMutableDictionary*)[representation metadata]; 
        NSLog(@"This is the read metadata I believe: %@",[metadataDictPhoto description]);

        metadataDictPhoto = metadataGlobal;

    } failureBlock:^(NSError *error) {
        NSLog(@"%@",[error description]);
    }];        

    NSMutableDictionary *exifDictionary = (NSMutableDictionary*)[metadataGlobal objectForKey:(NSString*) kCGImagePropertyExifDictionary];

    NSString *comment = (NSString*)[exifDictionary valueForKey:(NSString*)kCGImagePropertyExifUserComment];

    textView.text = comment;

Когда я запускаю его, сбоев нет, но в текстовом представлении ничего не отображается. Используя NSLogs, я подтвердил, что метаданные, полученные из моего кода, верны, так как я вижу свой пользовательский тег комментария exif. Если я наведу курсор мыши на комментарий, он выдаст ошибку. Я не могу избавиться от этого.

Как прочитать строку из словаря метаданных и отобразить ее в textView?

EDIT: DeePak Заметил, что я перепутал оператор присваивания и изменил его, но это не решило проблему. Пока я смотрел на это, я обнаружил, что мои NSLogs показывают, что код читает метаданные, которые передаются, а затем запускает словарь и строковый код, который на данный момент метаданные не создаются. Затем он завершает функцию делегата imagepicker, а затем в конечном итоге переходит к полному блоку, затем запускает код и выводит словарь, и тогда я вижу, что все правильно.

Как я могу заставить код работать немедленно или заставить программу ждать до завершения assetforurl?

Ответы [ 2 ]

1 голос
/ 03 июля 2011

Вы выполнили это задание.

metadataDictPhoto = metadataGlobal;

Вам нужно изменить это на

metadataGlobal = metadataDictPhoto;

metadataGlobal, вероятно, переменная экземпляра, поэтому она не падает, так как она по-прежнему равна nil здесь -

NSMutableDictionary *exifDictionary = (NSMutableDictionary*)[metadataGlobal objectForKey:(NSString*) kCGImagePropertyExifDictionary];
0 голосов
/ 04 июля 2011

Я исправил это, добавив код вне блока завершения в блок завершения и убедившись, что все переменные были сохранены для последующего использования.Это сработало отлично.

Теперь, только если бы я мог понять, почему он не пишет IPTC правильно, я бы установил.

...