2017-06-14 103 views
0

我想添加一个通道到通道阵列,如果它的水平高于阈值,这个函数就是提供通道级别的委托回调。多次调用函数时,将数组添加到数组中?

此fucn常用于提供级别的数据,但是在init中,我想将阈值以上的通道添加到数组中。不过,我不希望它再次添加它们,只是符合条件的每个通道的1个实例。

我想使用这段代码,并检查我从中接收数据的通道是否已经在channelArray中,如果它没有,然后添加它,如果它然后跳过它...但它没有调用/工作。

任何人都可以帮助我解决这个问题吗?问题是每个通道在每次移动时调用这个func,所以我需要它运行代码以便一次添加到数组中。

- (void)cdcControlDidReceiveBusSend:(NSInteger)channel withValue:(float)value forBus:(NSInteger)bus onModule:(NSInteger)module { 
    NSNumber *recievingChannel = [NSNumber numberWithInteger:channel]; 
    NSLog(@"RECIEVED SEND DATA FOR CHAN:%ld VALUE:%f FORBUS:%ld", (long)channel, value, (long)bus); 
    if (value != -80.000000) { 
     NSLog(@"CHANNEL:%ld FADER IS UP ATTEMPTING TO ADD TO FOCUS ARRAY", (long)channel); 

     for (NSNumber *arrayChannel in self.focusChannels) { 
      if (recievingChannel == arrayChannel) { 
       NSLog(@"ALREADY SAVED THIS CHANNEL...SKIPPING"); 
      } else { 
       NSLog(@"ADDING CHANNEL %ld", (long)channel); 
       [self.focusChannels addObject:[NSNumber numberWithInteger:channel]]; // add the channel number to the array of channel numbers if the fader is up 
       NSLog(@"FOCUS ARRAY NOW CONTAINS %lu CHANNELS", (unsigned long)self.focusChannels.count); 
      } 
     } 

    } else { 
     NSLog(@"CHANNEL:%ld FADER IS DOWN NOT IN MIXFOCUS ARRAY", (long)channel); 
    } 
} 
+1

它比较值直接

if (recievingChannel.integerValue == arrayChannel.integerValue){ //... } 

反正这个任务是可以解决的如果您将arrayChannel的整数值与'channel'进行比较,而不是立即创建receivingChannel,那么可以工作吗? –

+0

你是什么意思?只是使用通道而不是创建本地实例?这会如何改变? – jcad

+0

@Toma在接受的答案中指出了区别。 :) –

回答

0

不能使用==符来比较的NSNumber值。为了做正确的事情,你定义用比较的方法,像isEqueal

if ([recievingChannel isEqual:arrayChannel]) { 
    //... 
} 

或使用-[NSArray containsObject:]

- (void)cdcControlDidReceiveBusSend:(NSInteger)channel withValue:(float)value forBus:(NSInteger)bus onModule:(NSInteger)module { 
    if (value != -80.000000) { 
     if ([self.focusChannels containsObject:@(channel)] == NO) { 
      [self.focusChannels addObject:@(channel)]; 
     } 
    } 
} 
+0

感谢您的解决方案是正确的 – jcad