簡體   English   中英

觀察NSArray中NSDictionary的值變化

[英]Observe value changes of NSDictionary inside NSArray

這是我的NSArray

carType (
        {
        isSelected = 0;
        kFieldName = "All types";
        kObjectValue = 0;
        kObjectValueText = All;
    },
        {
        isSelected = 0;
        kFieldName = "4 seats";
        kObjectValue = 4;
        kObjectValueText = "4 seats";
    },
        {
        isSelected = 1;
        kFieldName = "7 seats";
        kObjectValue = 7;
        kObjectValueText = "7 seats";
    }
)

如何觀察isSelected字段的變化? 我在我的代碼中使用了KVO,但它不起作用。

carTypecontextNSArray屬性

- (void)viewDidLoad
{
    [super viewDidLoad];
    [context addObserver:self forKeyPath:@"carType" options:NSKeyValueObservingOptionNew context:NULL];
}


-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {
    if ([keyPath isEqualToString:@"carType"]) {
        NSLog(@"carType changed");
    }
}

//dealloc remove observer

要觀察數組中每個字典的isSelected更改,您必須注冊為數組中每個字典的觀察者。 正如我在書中所說:

您可以使用NSArray的實例方法addObserver:toObjectsAtIndexes:forKeyPath:options:context:有效地執行此addObserver:toObjectsAtIndexes:forKeyPath:options:context: ,但是如果數組本身是可變的,那么您還必須使用隨后添加到其中的任何新詞典注冊該鍵。 array(從數組中刪除字典時取消注冊)。

最后一部分可能會變得非常艱巨。 在許多情況下,最好完全放棄,只使用一個自定義類,它在發生變異時發出通知(而不是NSDictionary,而不是KVO)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM