2014-11-15 3 views
-1

Я довольно новичок в программировании на iOS, но мне нужно, чтобы протестировать прототип. Я получаю значение по bluetooth, которое изменяется при нажатии кнопки на физическом прототипе.Как проверить, изменилась ли строка

В моем приложении действие должно следовать при нажатии кнопки, поэтому мне нужно знать, когда значение изменилось.

Я пробовал все, что мог придумать и повеселился, но не нашел решения. Это мой текущий код:

-(void)bean:(PTDBean *)bean didUpdateScratchNumber:(NSNumber *)number withValue:(NSData *)data{ 
int value = *(int*)([data bytes]); 
NSString *lastvalue = nil; 
NSString *newValue = [NSString stringWithFormat:@"%d", value]; 
    NSLog(@"ScratchWaarde: %d", value); 
if ([newValue isEqualToString:lastvalue]) { 
    NSLog(@"Last Value: %@", lastvalue); 
    }else{ 
     NSLog(@"Pushed"); 
     lastvalue = newValue; 
    } 
} 

Благодарим Вас за помощь!

+0

вы также новое в программировании вообще? Если это так, вы можете быть намного счастливее, изучая Swift вместо того, чтобы пытаться сделать это в Objective-C. Кажется, что Objective-C вас путает. – matt

+0

что вы думаете, если 'lastValue' является переменной _local_, тогда она сохраняет значение _globally_? вы новичок в каждом типе программирования, а не только в iOS, huhh? – holex

ответ

0

Да, похоже, что ОП ожидает LastValue быть сохранены как состояние на объекте, так что ...

// in this class's interface 
@property(strong,nonatomic) NSString *lastValue; 

-(void)bean:(PTDBean *)bean didUpdateScratchNumber:(NSNumber *)number withValue:(NSData *)data{ 

    // it looks like the OP is trying to get a string from the data, so... 
    NSString *newValue = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; 

    NSLog(@"ScratchWaarde: %d", value); 
    if ([newValue isEqualToString:self.lastvalue]) { 
     NSLog(@"Last Value: %@", self.lastvalue); 
    } else { 
     NSLog(@"Pushed"); 
     self.lastvalue = newValue; 
    } 
} 
0

Вы не имеете никакого смысла в коде. Вы говорите:

NSString *lastvalue = nil; 
NSString *newValue = // ... 
if ([newValue isEqualToString:lastvalue]) { 

Ни при каких обстоятельствах newValueкогда-либо быть равна lastValue, потому что lastValue гарантированно будет ноль, потому что это значение, которое вы устанавливаете его в первой строке (и newValue, потому что вы устанавливаете его на фактическую NSString, гарантируется не, чтобы быть нолем).

Итак, пока я не понимаю, что именно вы пытаетесь выполнить, это, очевидно, не так. Дело не столько в программировании, сколько в простом логическом мышлении. Программа может делать только то, что вы говорите, и что вы говорите, это глупо.

(По всей вероятности, что вы не захватывая, что lastvalue чисто локальная по отношению к этому методу, так что новый каждый раз, когда ваш метод. Если вы хотите упорнойlastvalue, вам нужно свойства глобального к класс, а не локальная переменная.)

+0

Я знал, что код, который я разместил, не имеет смысла, у меня есть только некоторый опыт обработки, прежде чем начинать с Objective-C, поэтому я просто попытался выяснить, как заставить его работать с ограниченными знаниями, которые у меня были. Я знал, что локальная переменная не сработает, однако я не собирался создавать свойство global для класса, что звучит полезно, я буду смотреть на это! – Thomvb

Смежные вопросы