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

bufferinが再利用されるインスタンスである場合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
     }
}
于 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 に答える