2015-01-11 85 views
1

使用iOS的QR扫描仪。生成我自己独特的QR码以匹配每个“屏幕”。 下面是用于列出QR扫描仪发现的所有屏幕的代码片段。这样可以很好地扫描QR码并打开相应的屏幕。如何跟踪某些屏幕打开?

我现在需要的是跟踪某个屏幕以及它被扫描和显示的次数,以便如果显示的次数超过3次,将出现不同的屏幕。

这个想法是,如果相同的QR码扫描超过3次,会出现一个警告屏幕。 任何想法如何做到这一点?

//loop through every screen in the applications list of screens 
    for(int i = 0; i < [[appDelegate.rootApp screens] count]; i++){ 
     BT_item *thisScreen = [[appDelegate.rootApp screens] objectAtIndex:i]; 
     // [BT_debugger showIt:self message:[NSString stringWithFormat:@"thisScreen:%@", thisScreen.itemId]]; 

     if ([thisScreen.itemId isEqualToString:result]) { 
      [self handleTapToLoadScreen:thisScreen theMenuItemData:nil]; 
      return; 

回答

1

您可以使用NSCountedSet来跟踪每个代码被扫描的次数。 NSCountedSet将举行一个无序对象集,以及有多少次,他们已经被添加到组

因此,例如,以下内容:

NSCountedSet *countedSet = [[NSCountedSet alloc] init]; 
NSArray *codes = @[@"a", @"b", @"c", @"d", @"a", @"b", @"a", @"a"]; 

for (NSString *code in codes) { 
    [countedSet addObject:code]; 

    if ([countedSet countForObject:code] > 3) { 
     NSLog(@"more than 3"); 
    } else { 
     NSLog(@"3 or less"); 
    } 
} 

NSLog(@"%@",countedSet); 

输出

3或少

3以下

3以下

3或更小

3以下

3以下

3以下

超过3

(d 1,B 2,C 1,一个[ 4])

并且由于NSCountedSet符合NSCoding,所以很容易将您的设置对象序列化并将其存储为在启动之间保持不变。

+0

K谢谢!我对逻辑部分并不擅长,但仍然在努力学习。我会修补一下。希望我可以要求更多的帮助,如果需要:) –

+0

@IanJames没关系。只要你确保你在NSCountedSet的同一个实例上做了所有的比较,这个类的用法应该是相当直接的。对于最初的回答感到抱歉,我想我被困在迅捷装备中。 –

+0

那么我会使用“结果”为countset?无法开始。更多的是在这个级别的黑客攻击。我真的很感谢帮助 –