如何在使用AVFoundation时接受多种类型的条形码

问题描述:

我在启动AVFoundation时遇到了允许多种类型的条形码/ QR码的问题,如果我使用其中的一种,它可以工作,但是当我尝试仅接受它时接受最后一个如何在使用AVFoundation时接受多种类型的条形码

下面是相关的代码片段

[captureMetadataOutput setMetadataObjectTypes:[NSArray arrayWithObject:AVMetadataObjectTypeQRCode]]; 
[captureMetadataOutput setMetadataObjectTypes:[NSArray arrayWithObject:AVMetadataObjectTypeCode39Code] 

的是,现在我该怎么添加几种类型的被接受?

+0

'[captureMetadataOutput setMetadataObjectTypes:[NSArray的arrayWithObjects:AVMetadataObjectTypeQRCode ,AVMetadataObjectTypeCode39Code,nil];'?或'[captureMetadataOutput setMetadataObjectTypes:@ [AVMetadataObjectTypeQRCode,AVMetadataObjectTypeCode39Code]];'? – Larme

+0

都像魅力一样工作,让它成为答案,我会接受 –

当您使用setMetadataObjectTypes:时,它将设置metadataObjectTypes,即如果有新值,则替换之前的值。它不会“添加/求和”它们。

因此,如果不使用只有一个对象的NSArray[NSArray arrayWithObject:AVMetadataObjectTypeQRCode]),请使用arrayWithObjects:(注意“s”)创建一个包含所有类型的数组。

[NSArray arrayWithObjects: AVMetadataObjectTypeQRCode, AVMetadataObjectTypeCode39Code, nil]` 

随着short hand syntax(它的等价物):

@[AVMetadataObjectTypeQRCode, AVMetadataObjectTypeCode39Code] 

决赛:

[captureMetadataOutput setMetadataObjectTypes:[NSArray arrayWithObjects: AVMetadataObjectTypeQRCode, AVMetadataObjectTypeCode39Code, nil]; 

[captureMetadataOutput setMetadataObjectTypes:@[AVMetadataObjectTypeQRCode, AVMetadataObjectTypeCode39Code]];