为什么nsstring在另一个类中使用时会消失?

时间:2012-11-26 22:54:17

标签: objective-c

1 个答案:

答案 0 :(得分:2)

当您将标签的文本设置为bits指向的字符串时,它会存储对该字符串的引用。稍后当您更改data时,它会创建一个data指向的新字符串,但bits和标签都仍然具有查看原始字符串的原始指针。您希望在更改data时更新它们:

有几种方法可以采取这种情况,但最简单的方法之一是观察data classBI属性的更改,并在每次更新bits和标签时它改变了:

[classBI addObserver:self 
          forKeyPath:@"data" 
             options:NSKeyValueObservingOptionNew 
             context:NULL];

然后,每当数据发生变化时,都会调用此方法:

// Note that you will need to get a reference to 'label' in order for this to work:
- (void) observeValueForKeyPath:(NSString*)keyPath ofObject:(id)object change:(NSDictionary*)change context:(void*)context {
    if ([keyPath isEqual:@"data"]) {
        bits = [change objectForKey:NSKeyValueChangeNewKey];
        label.text = bits;
    }
}