这是我的代码:
·H
@interface AppDelegate : NSObject <NSApplicationDelegate>{
NSString *lastValue;
}
的.m
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
lastValue = nil;
}
- (void) fullDMXReceived:(NSString*)finalData {
if (finalData != lastValue) {
lastValue = finalData;
// doing something
}
}
出于某种原因,“做某事”&#39;只被叫一次,它就会停止。
一些背景信息:&#39; fullDMXReceived&#39;通过新信息每100毫秒左右调用一次。有时(实际上很多次)数据是相同的,因此,我不想做某事&#39;跑步。如果它有所不同,我想要做些什么&#39;发生。
我不确定为什么它只运行&#39;做某事&#39;即使最终数据发生变化也是如此。
有什么想法吗?
答案 0 :(得分:1)
如果buffer
中的fullDMXReceived:
是重用的NSMutableString
实例,则需要复制实际字符串而不是仅仅分配实例,请尝试以下操作:
- (void) fullDMXReceived:(NSString*)finalData {
if (finalData != nil &&
![finalData isEqualToString:lastValue]) {
[lastValue release]; // only needed if you don't use ARC
lastValue = [finalData copy];
// doing something
}
}
答案 1 :(得分:0)
我想知道你的lastValue..try没有setter / getter / @property来实现它,然后检查是否存在问题。
编辑:
将您的代码更改为:
.h
@interface AppDelegate : NSObject <NSApplicationDelegate>
@property(strong) NSString *lastValue;
@end
.m
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
_lastValue = nil;
}
- (void) fullDMXReceived:(NSString*)finalData {
if (![finalData isEqualToString:_lastValue]) {
_lastValue = finalData;
// doing something
}
}