2017-06-14 71 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