0

这是我的代码:

。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
     }
}

出于某种原因,“做某事”只被调用一次,然后就停止了。

一些背景信息:“fullDMXReceived”每 100 毫秒左右调用一次,并提供新信息。有时(实际上很多次)数据是相同的,因此,我不想“做某事”运行。如果它不同,我确实希望“做某事”发生。

我不确定为什么即使 finalData 发生变化它也只运行一次“做某事”。

有任何想法吗?

4

2 回答 2

1

如果bufferinfullDMXReceived:是一个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
     }
}
于 2012-12-08T18:31:39.800 回答
0

我想知道您的 lastValue 没有 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
     }
}
于 2012-12-08T18:24:11.747 回答