当NSString改变时,即使在改变之后,“做某事”也只被调用一次

时间:2012-12-08 17:53:24

标签: objective-c macos cocoa nsstring

这是我的代码:

·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;即使最终数据发生变化也是如此。

有什么想法吗?

2 个答案:

答案 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
     }
}