从iPhone上的图像读取元数据时<invalid cfstringref =“”> </invalid>

时间:2011-07-03 00:08:36

标签: iphone xcode image metadata nsdictionary

我从照片库中读取图像,然后使用资源库获取元数据。然后我尝试阅读用户评论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;

当我运行它时,没有崩溃,但textview中没有显示任何内容。我已经验证了使用NSLogs从我的代码收到的元数据是正确的,因为我可以看到我的自定义exif用户评论标记。如果我将鼠标放在评论上,它会给我错误。我无法摆脱这个。

如何从元数据字典中读取字符串并将其显示在textView?

编辑:DeePak注意到我混淆了一个赋值语句并且我更改了它,但是这并没有解决问题。虽然我正在研究这个问题,但我发现我的NSLogs显示代码是读取元数据被传递然后它运行字典和字符串代码,此时元数据不会被创建。然后它完成了imagepicker委托函数,然后它最终进入完整的块然后运行代码并输出字典然后我可以看到一切都是正确的。

我怎样才能让代码无法运行或让程序等待资产完成?

2 个答案:

答案 0 :(得分:1)

你翻了这个作业。

metadataDictPhoto = metadataGlobal;

您需要将其更改为

metadataGlobal = metadataDictPhoto;

metadataGlobal可能是一个实例变量,这就是为什么它不会崩溃,因为它仍然是nil -

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

答案 1 :(得分:0)

我通过将完成块外部的代码添加到完成块内来修复它,并确保保存所有变量然后使用。这非常有效。

现在,只有我能弄明白为什么它没有正确地写IPTC,我才会被设置。